SQL Server:计算WHERE子句定义的每月一小时的订单

时间:2013-06-15 16:11:55

标签: sql sql-server datediff hour

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

我有另一个报告(1)中的WHERE条款,该条款确定了上个月的正确月份'从它运行的角度来看。

我希望在最左边的时间里能够有几个小时的时间。列,而不是日期。

我以为我可以在WHERE内获得不同的日子,然后计算datepart,其中小时= 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)

1 个答案:

答案 0 :(得分: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)

很抱歉不清楚。希望这对未来的某些人有用。

感谢编辑/帮助太多人,我会确保我提出的任何其他问题都是正确的:)