首页 > 解决方案 > SQL Server:选择不同的日期加上条件和计数

问题描述

我希望从一列中选择和计算不同的天数,并排除在另一列中具有特定值的天数。

表结构是这样的;

+-------------------------+-------------------------+
|           DAY           |          CHECK          |
+-------------------------+-------------------------+
| 2018-07-18 00:00:00.000 | 2018-07-18 12:46:35.000 |
| 2018-07-19 00:00:00.000 | 2018-07-19 15:58:14.000 |
| 2018-07-20 00:00:00.000 | 2018-07-20 15:52:57.000 |
| 2018-07-21 00:00:00.000 | 2018-07-21 00:00:00.000 |
| 2018-07-23 00:00:00.000 | 2018-07-23 08:54:49.000 |
| 2018-07-23 00:00:00.000 | 2018-07-23 12:52:41.000 |
| 2018-07-26 00:00:00.000 | 2018-07-26 08:55:34.000 |
+-------------------------+-------------------------+

因此,预期的结果将是 DAY 列中不同天数的计数,并且在该计数中排除 CHECK 列中具有此时间 00:00:00.000 的所有天。

在这种情况下,计数结果将是 5 天

我设法计算了天数,但还没有弄清楚检查列的条件部分

COUNT(DISTINCT DAY) AS 'TotalDays',

标签: sql-servertsql

解决方案


这个怎么样:

SELECT COUNT(DISTINCT [DAY]) AS 'TotalDays'
FROM tbl
WHERE [CHECK] <> DATEADD(day, DATEDIFF(day, 0, [CHECK]), 0);

查看您的示例数据,也许 WHERE 子句WHERE [CHECK] <> [DAY]就足够了。


推荐阅读