MYSQL从周六开始获取每月的周,且前导零

我的照片

我有一个非常复杂的查询,需要帮助。我有一个包含一个表Order_IDDateDay

我需要每月的星期几Week_No此字段有4个关键条件。

  1. 该周从星期六开始,在每个月初重新开始。
  2. 结果的总长度应为3个字符,因此应始终有2个前导零,例如001
  3. Week_No001即使没有其他条目导致该条目的特定将始终从该条目开始Date
  4. Week_No 即使在该月的特定星期没有订单,也始终会增加1。

举例说明条件3.和4.,

如果只有2个订单六月份,一个在2020-06-29和一个上2020-06-11Week_No002001分别为前者和后者。

希望我的下表足够清楚。

╔══════════╦════════════╦═════╦═════════╗
║ 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 ║
╚══════════╩════════════╩═════╩═════════╝
戈登·利诺夫(Gordon Linoff):

嗯。您实际上可以利用潜在客户和累计金额来完成此操作。逻辑基本上是:

  • 如果上一个日期是同一个月,并且之间有一个星期六,则加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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章