与 select 语句中的小时和天不匹配的日期值的 SQL 计数



我有一个业务流程特有的问题。我的用户需要知道在特定结束时间之前有多少个日期与小时或日期不匹配。

下面是一个示例。

AAA, 2016-03-15 16:00:28.967, 2016-03-15 16:02:58.487, 2016-03-17 14:01:24.243

在上面的示例中,id AAA有 3 个条目。我只需要计算那些没有匹配的时间和日期的。所以实际计数应该是 2。

我必须在SQL中完成所有这些操作,并且不能使用CTE。它必须是子选择或某种类型的联接。

像这样的东西。

SELECT id, date, (
    SELECT COUNT(*) 
    FROM x 
    WHERE day!=day 
    AND hour!=hour AND date < z
) AS DateCount

结果将是AAA, 2

我正在考虑某种类型的递归比较,但我不确定如何在没有 CTE 的情况下完成此操作。

在SQL Server中,您可以尝试如下操作:

SELECT id, CONVERT(VARCHAR(13), [date], 120) AS [Date], COUNT(*) AS DateCount
FROM YourTable
WHERE [date] < #ENDDATE
GROUP BY id, CONVERT(VARCHAR(13), [date], 120)
SELECT a AS current_a, COUNT(*) AS b,day AS day, hour as hour, 
    (SELECT COUNT(*)
     FROM t 
     WHERE day != day 
     AND hour != hour 
     AND date < z ) as datecount
FROM t GROUP BY a ORDER by b DESC

最新更新