SQL在select语句中计算不匹配小时和日期的日期值

时间:2016-04-27 19:50:00

标签: sql sql-server sql-server-2012

我遇到了业务流程特有的问题。我的用户需要知道在特定的结束时间之前计算的日期数,这些日期在小时或当天不匹配。

这是一个例子。

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的情况下实现这一目标。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在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)