sql - SQL Server 昨天计数
问题描述
我正在尝试计算所有昨天的行数。我的查询运行良好,但没有获取空值。有没有办法可以查询空值和非空值的计数?
这是我的代码:
SELECT dateadd(day,datediff(day,0,GETDATE())-1,0) as Received_Date,
COUNT(*) as Enrollments_Completed
FROM Table CD,
CCMDB.dbo.ResolutionLetterDetails RD
WHERE CD.ccid = RD.ccid
and CompletedDate >= DATEADD(d,DATEDIFF(d,1,getdate()),0)
and CompletedDate < DATEADD(d,DATEDIFF(d,0,getdate()),0)
AND CatID in('cat0014')
AND IncomingType <> 'RITS'
AND status = 'Completed'
解决方案
我会修复您的查询并执行以下操作:
SELECT CAST(DATEADD(day, -1, GETDATE()) as DATE) as Received_Date,
COUNT(*) as Enrollments_Completed
FROM Table CD JOIN
CCMDB.dbo.ResolutionLetterDetails RD
ON CD.ccid = RD.ccid
WHERE CompletedDate >= CAST(DATEADD(day, -1, GETDATE()) as DATE) AND
CompletedDate < CAST(GETDATE() as DATE) AND
CatID IN ('cat0014') AND
IncomingType <> 'RITS' AND
status = 'Completed';
对于日期部分,您还可以执行以下操作:
CAST(CompletedDate as DATE) = CAST(DATEADD(day, -1, GETDATE()) as DATE)
这个版本在 SQL Server 中甚至是索引安全的(尽管在其他数据库中不一定)。
笔记:
DATE
数据类型大大简化了您的计算。- 切勿在
FROM
子句中使用逗号。 始终使用正确、明确、标准JOIN
的语法。 - 您应该限定所有列名,以便您(以及阅读查询的任何人)知道该列来自哪个表。