首页 > 解决方案 > 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'

标签: sqlsql-server

解决方案


我会修复您的查询并执行以下操作:

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的语法。
  • 您应该限定所有列名,以便您(以及阅读查询的任何人)知道该列来自哪个表。

推荐阅读