2

我希望计算上个月每天的每小时订单数。

WHERE从另一份报告 (1) 中获得了此条款,该条款从运行时开始确定“上个月”的正确月份。

理想情况下,我希望将小时数作为我的“最左侧”列,而不是日期。

我认为我可以在 datepart 中得到不同的WHERE日期,然后计算 datepart,其中 hour = 1、2 等。但是,下面的代码 (2) 会导致超过 300 条记录。

(1)

WHERE YEAR(Bookings.PICKUP_DATE) 
        = YEAR(DATEADD(mm, -1, DATEADD(m, DATEDIFF(m, 0, getdate()), 0)))
  AND MONTH(Bookings.PICKUP_DATE) 
        = MONTH(DATEADD(mm, -1, DATEADD(m, DATEDIFF(m, 0, getdate()), 0)))

(2)

select 
   distinct(datepart(dd,b.pickup_date)) as DAYOFTHEMONTH
       ,COUNT(CASE WHEN DATEPART(HH,B.PICKUP_DATE) = 1 THEN 1 ELSE 0 END)
4

1 回答 1

1

抱歉之前不清楚。我现在已经解决了这个问题。

我有太多记录的原因只是我的 GROUP BY 子句没有应用 DAY 函数。

我的数据集现在是正确的,并且我得到了日期范围内的所有日期:

distinct(datepart(dd,timestamp)) as DAYOFTHEMONTH

一个小时(在本例中为午夜)的订单计数为:

count(case when datepart(hh,timestamp) = 0 then timestamp else null end) as '00:00'

我的 WHERE 子句提供当前前一个月的所有数据:

WHERE
YEAR(timestamp) = YEAR(DATEADD(mm,-1,DATEADD(m,DATEDIFF(m,0,getdate()),0)))
AND
MONTH(timestamp) = MONTH(DATEADD(mm,-1,DATEADD(m,DATEDIFF(m,0,getdate()),0)))

最后,我得到了正确的分组,将 DAY 应用于 GROUP BY

GROUP BY day(timestamp)

很抱歉一直不清楚。希望这对将来的人有用。

谢谢你们的编辑/帮助,我会确保我问的任何其他问题都是正确的:)

于 2013-06-16T20:18:05.833 回答