我的系统数据包含事件记录,主要是我们约束事件的开放日期和关闭日期。
我创建了一个查询,其中显示了所选月份中打开的事件数量以及同月关闭的事件数量。
我减去月份以获得关闭事件数
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获取打开和关闭的所有数据?
答案 0 :(得分:0)
对我来说,您可以尝试将日期转换为DATE
因为据我所知,您的字段位于DATETIME
同样根据您的查询
CASE WHEN Month(Closedate) = Month(Opendate)
您正在比较两个月,因此,如果例如OpenDate = 2014-04-04
和CloseDate = 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'
你可以从这开始;)