首页 > 解决方案 > 将周末的计数总和滚动到星期一的计数

问题描述

我正在为一周中的每一天提取发货计数。由于该操作在周末是自动化的,我需要将这些货物的数量计入周一的数量。

我从简单的查询开始:

SELECT date(im.Import_date_time) AS 'Date',
    COUNT(im.Tracking_Number) AS 'Imports'
 FROM invoice_master im
    WHERE im.Import_date_time >= '2019-01-07'
 GROUP BY date(im.Import_date_time)

我试图添加:

 CASE
   WHEN weekday(*) IN (5,6,0) THEN SUM(*)
   ELSE COUNT(*)
 END 
 AS 'Shipments'

然后我在 WHEN 子句中尝试了 COUNT。这些都没有奏效——语法错误。

我还尝试添加一个子查询,我不再有查询,它只是给了我与初始查询相同的结果。

使用子查询和案例我得到了与初始查询相同的结果。

我的基本查询得到了明显的结果:

日期导入

2019 年 1 月 7 日 5432

2019 年 1 月 8 日 18434

2019 年 1 月 9 日 4603

1/10/2019 1916

2019 年 1 月 11 日 2287

2019 年 1 月 12 日 90

2019 年 1 月 13 日 3091

2019 年 1 月 14 日 6915

我需要:

日期导入

2019 年 1 月 7 日 5432

2019 年 1 月 8 日 18434

2019 年 1 月 9 日 4603

1/10/2019 1916

2019 年 1 月 11 日 2287

2019 年 1 月 14 日 10096

标签: mysqlsqlsubquery

解决方案


必要时使用case表达式添加偏移量:

SELECT (case when dayofweek(im.Import_date_time) in (2, 3, 4, 5, 6)
             then date(im.Import_date_time)
             when dayofweek(im.Import_date_time) = 1
             then date(im.Import_date_time) + interval 1 day
             when dayofweek(im.Import_date_time) = 7
             then date(im.Import_date_time) + interval 2 day
        end) as dte
       COUNT(*) AS Imports
FROM invoice_master im
WHERE im.Import_date_time >= '2019-01-07'
GROUP BY dte;

推荐阅读