2013-06-23 65 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