2013-06-23 69 views
2

我有问题SELECT COUNT不同:我需要的答案是6 不同的时间是300秒<在数为1 我的SQL:如何选择COUNT DISTINCT?

SELECT COUNT(DISTINCT(cast([Date] as date) + cast([time] as datetime))) 
FROM [Table1]WHERE [DATE] = '2013-06-22' 
AND ErrCode = 'Scrubber Failure'AND Frequency = 1 

+0

你正在使用什么数据库系统? –

+0

看起来像[日期]语法的SQL服务器 – Bohemian

+0

亚历克斯 - SQL Server 2008 – user2286756

回答

1

修订

SELECT COUNT(DISTINCT 
      ROUND(CONVERT(DECIMAL(20, 4), 
        DATEDIFF(minute, 
           CONVERT(datetime, '2013-01-01 00:00:00', 120), 
           CONVERT(datetime, date + ' ' + time, 120)))/5, 0)) n 
    FROM table1 
WHERE date = '2013-06-22' 
    AND errcode = 'Scrubber Failure' 
    AND frequency = 1 

输出:

 
| N | 
----- 
| 6 | 

这里是SQLFiddle演示。

+0

tq用于回复...呃你正在比较'2013-01-01 00:00:00'(固定日期)。嗯..我想,如果有'2014-06-22'的数据会发生什么(已经更新模式)。为什么你用(/ 5)分开?对于新的模式,答案应该是7. – user2286756

+0

那么任何日期<= WHERE子句中的日期过滤器的下端可以用作基准日期,并且只需要以分钟计算时间差。在你的特定例子中,它也可以是'2013-06-22'。 300秒/ 60 = 5分钟间隔,这就是为什么差异除以5.现在这里更新为sqlfiddle,日期为'2014-06-22' http://sqlfiddle.com/#!3/1ebf0/1。结果是7. – peterm

+0

@ user2286756它有帮助吗? – peterm