获取两个日期之间的数据计数

时间:2014-05-26 09:32:17

标签: sql date time

我的系统数据包含事件记录,主要是我们约束事件的开放日期和关闭日期。

我创建了一个查询,其中显示了所选月份中打开的事件数量以及同月关闭的事件数量。

我减去月份以获得关闭事件数

COUNT(CASE WHEN Month(Closedate) = Month(Opendate) THEN 1 ELSE NULL END) AS closed

开放事件的数量为

COUNT(*) AS Opened

但是当Iam运行这个命令时,它给我数据但不准确,因为我需要数据,开放日期从'00:00:00'开始到'23:59:59'以及关闭日期。< / p>

以下是声明:

SELECT YEAR(Opendate) AS Year, MONTH(Opendate) AS Month, 
COUNT(CASE WHEN Month(Closedate) = Month(Opendate) THEN 1 ELSE NULL END) AS closed, 
COUNT(*)  AS Opened
FROM Incidents
WHERE (Opendate >= @YearStart) AND (Opendate <= @YearEnd)
GROUP BY YEAR(Opendate), MONTH(Opendate)
ORDER BY Year, Month 

问题:如何从00:00:00到23:59:59获取打开和关闭的所有数据?

1 个答案:

答案 0 :(得分:0)

对我来说,您可以尝试将日期转换为DATE因为据我所知,您的字段位于DATETIME

同样根据您的查询

CASE WHEN Month(Closedate) = Month(Opendate) 

您正在比较两个月,因此,如果例如OpenDate = 2014-04-04CloseDate = 2014-04-06,则该月仍为4

您应该使用

获得结果
CASE WHEN convert(date,Closedate) = convert(date,Opendate)

由于它比较了整个日期,因此只有在CloseDate = OpenDate

时才会给出结果

此外,如果您能提供一些源数据和预期结果,那将有助于解决问题


DECLARE @mydate datetime = getdate()
SELECT 
convert(varchar(10),DATEADD(dd,-(DAY(DATEADD(mm,1,@mydate))),DATEADD(mm,1,@mydate)),111) + ' 23:59:59'
,CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(@mydate)-1),@mydate),111) + ' 00:00:00'

你可以从这开始;)