sql - SQL Dense Rank with Case When
问题描述
我有一个简单的 SQL 行,它告诉我某个时间范围内的所有订单。我们通过电子邮件定义客户。
,SUM(CASE WHEN T.Order_Status <> 'CANCELLED' AND T.Date_Created BETWEEN '6/02/2019' and '8/02/2019' THEN 1 ELSE 0 END) over (partition by Email) TotalOrdersNewBase
现在我想做的是找到一种方法让所有客户都超过一定范围。
这条线告诉我整个期间每月的所有客户
,DENSE_RANK() over (partition by Date order by Email asc) + DENSE_RANK() over (partition by Date order by Email desc) - 1 as TotalCustomers
但是如何将上面的行格式化为仅介于 6/02 和 8/02 之间?
解决方案
以下语句应该有效:
,CASE WHEN Date between '06-01-2002' and '08-31-2002' then DENSE_RANK() over (partition by Date order by Email asc) else 0 end +
CASE WHEN Date between '06-01-2002' and '08-31-2002' then DENSE_RANK() over (partition by Date order by Email desc) - 1 else 0 end as TotalCustomers
注意:我假设日期必须限制在 2002 年 6 月和 2002 年 8 月之间
推荐阅读
- web - 无法访问 Power Designer Web 门户
- javascript - Javascript警报根本不显示
- typo3 - TYPO3 - 页面渲染后的钩子/信号
- database - 如何在 laravel 中使用 Group by 查询?
- php - 不能将字符串偏移量用作 addressfield_widget_process() 中的数组
- python - 为什么在新测试图像上运行良好的卷积神经网络模型在视频流上失败?
- python - Anaconda 的最佳实践是设置需要在 Anaconda 找到的财务功能的 python 环境的方式吗?
- java - 如何在 Linux 中提高 Java SOAP Web 服务客户端性能
- rabbitmq - 设置消息之间的最小延迟 - rabbitmq
- javascript - Nodejs如何决定首先执行哪个函数?