我有一个简单的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之间呢?
发布于 2019-08-28 00:26:18
此代码的目的是统计一段时间内唯一电子邮件的数量。对于总数字,正确的代码是:
(dense_rank() over (order by Email asc) +
dense_rank() over (order by Email desc) - 1
) as TotalCustomers在一段时间内,我认为这是可行的:
(dense_rank() over (order by (case when t.Date_Created >= '2019-06-02' and t.date_created < '2019-08-03' then Email end) asc) +
dense_rank() over (order by (case when t.Date_Created >= '2019-06-02' and t.date_created < '2019-08-03' then Email end) desc) - 1
) as TotalCustomers_in_period实际上,“思考”有点弱。这是正确的逻辑。唯一关心的是一些边界问题和减去NULL电子邮件(所以在一些边缘情况下可能会有一个off-by-one问题)。
发布于 2019-08-27 23:16:11
下面的语句应该可以工作:
,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月之间。
https://stackoverflow.com/questions/57677673
复制相似问题