mysql从星期六开始获取一个月中的一周,以前导零开始

yqhsw0fo  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(340)

我有一个非常复杂的问题需要帮助。我有一张table Order_ID , Date 以及 Day .
我需要一周的时间 Week_No . 这个领域有4个关键条件。
一周从星期六开始,每个月初重新开始。
结果的总长度应该是3个字符,因此应该始终有2个前导零,例如。 001 . Week_No 总是从 001 即使没有其他条目指向该条目的特定 Date . Week_No 即使当月某一周没有订单,也始终递增1。
举一个条件3的例子。和4。,
如果6月份只有2个订单,一个在 2020-06-29 一个在上面 2020-06-11 , Week_No002 以及 001 分别为前者和后者。
希望我下面的table足够清楚。

╔══════════╦════════════╦═════╦═════════╗
║ 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 ║
╚══════════╩════════════╩═════╩═════════╝
jjhzyzn0

jjhzyzn01#

嗯。你可以用铅和一个累积的总和来做这个。逻辑基本上是:
如果上一个日期在同一个月,中间有一个星期六,则加1
从1开始,开始一个月的第一天。
逻辑如下:

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

相关问题