【发布时间】:2014-10-20 19:35:43
【问题描述】:
我正在尝试(按小时)计算数据库中的条目数。我已经成功编写了一个按小时计数的查询,但它省略了零条目的小时数。我需要包含零的结果。我浏览了互联网,并找到了很多建议。我创建了一个视图,其中有一列按分钟包含日期时间条目。我尝试将主表加入到这个视图中,得到的结果与没有加入时相同。仍然没有零。想知道如何让这个查询返回零。我正在使用 MS SQL 2008 R2。有什么建议吗?
declare @limit datetime;
use InputArchive
set @limit = current_timestamp;
set @limit = DATEADD(hour, -72, @limit);
SELECT DATEADD(hour, datediff(hour, 0, ArchivedItems.RecordCreated), 0) as TimeHour, COUNT(ISNULL((ArchivedItems.RecordCreated),' ')) as NumPerHour
FROM ArchivedItems
LEFT OUTER JOIN vw_hoursalot
ON vw_hoursalot.dtHr = ArchivedItems.RecordCreated
where InputTypeId = 5 or InputTypeId = 6 or InputTypeId = 8 and (ArchivedItems.RecordCreated >= @limit)
Group BY DATEADD(hour, Datediff(hour, 0, ArchivedItems.RecordCreated), 0)
order by DATEADD(hour, datediff(hour, 0, ArchivedItems.RecordCreated), 0) desc
option (MAXRECURSION 0)
更新:我将营业时间视图更改为按小时 很抱歉,我不确定您所说的全视图 SQL 是什么意思。
出于法律原因,我无法从 archivedItems 表中放入任何海峡信息,但 RecordCreated 列是海峡时间戳,即“2013-04-05 14:09:59.167”
【问题讨论】:
-
要么颠倒顺序,要么将您的条件更改为 RIGHT OUTER JOIN - 您需要此查询从完整小时列表开始,然后连接到另一端。
-
右外连接和交换顺序都不起作用,它们都返回了相同的内容,即 2 行,每行有一个计数的结果。应该不止两行
标签: sql sql-server sql-server-2008 tsql count