我有一个非常复杂的查询,需要帮助。我有一个包含一个表Order_ID
,Date
和Day
。
我需要每月的星期几Week_No
。此字段有4个关键条件。
001
。Week_No
001
即使没有其他条目导致该条目的特定,也将始终从该条目开始Date
。Week_No
即使在该月的特定星期没有订单,也始终会增加1。举例说明条件3.和4.,
如果只有2个订单六月份,一个在2020-06-29
和一个上2020-06-11
,Week_No
将002
和001
分别为前者和后者。
希望我的下表足够清楚。
╔══════════╦════════════╦═════╦═════════╗
║ Order_ID ║ Date ║ Day ║ Week_No ║
╠══════════╬════════════╬═════╬═════════╣
║ 11 ║ 2020-06-25 ║ Thu ║ 002 ║
║ 10 ║ 2020-06-24 ║ Wed ║ 002 ║
║ 9 ║ 2020-06-20 ║ Sat ║ 002 ║
║ 8 ║ 2020-06-11 ║ Thu ║ 001 ║
║ 7 ║ 2020-05-31 ║ Sun ║ 006 ║
║ 6 ║ 2020-05-31 ║ Sun ║ 006 ║
║ 5 ║ 2020-05-29 ║ Fri ║ 005 ║
║ 4 ║ 2020-05-20 ║ Wed ║ 004 ║
║ 3 ║ 2020-05-14 ║ Thu ║ 003 ║
║ 2 ║ 2020-05-07 ║ Thu ║ 002 ║
║ 1 ║ 2020-05-01 ║ Fri ║ 001 ║
╚══════════╩════════════╩═════╩═════════╝
嗯。。。您实际上可以利用潜在客户和累计金额来完成此操作。逻辑基本上是:
逻辑如下所示:
select t.*,
sum(case when extract(year_month from date) <> extract(year_month from prev_date) or prev_date is null
then 1
when datediff(date, prev_date) >= 7
then 1
when day = 'Fri' or
day = 'Thu' and prev_day not in ('Fri') or
day = 'Wed' and prev_day not in ('Fri', 'Thu') or
day = 'Tue' and prev_day not in ('Fri', 'Thu', 'Wed') or
day = 'Mon' and prev_day not in ('Fri', 'Thu', 'Wed', 'Tue') or
day = 'Sun' and prev_day not in ('Fri', 'Thu', 'Wed', 'Tue', 'Mon')
then 0
else 1
end) over (order by date) as week_num
from (select t.*,
lag(date) over (order by date) as prev_date,
lag(day) over (order by day) as prev_day
from t
) t
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句