[英]MYSQL Get week of the month starting from Saturday with leading zeros
我有一个非常复杂的查询需要帮助。 我有一个包含Order_ID
、 Date
和Day
的表。
我需要得到本月的一周Week_No
。 该领域有4个关键条件。
001
。Week_No
将始终从001
开始,即使没有其他条目导致该条目的特定Date
。Week_No
以 1 递增,即使在该月的某个特定周内没有订单。以条件 3. 和 4. 为例,
如果 6 月份只有 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.