2014-02-28 53 views
1

我很難知道是否有解決方案。檢查SQL中是否缺少數據

我在嘗試檢測每小時丟失的數據。示例:

表HRLY_DATA:

NAME   HOUR 
Me   0 
Me   1 
Me   2 
Me   3 
Me   6 
Me   7 
You   0 
You   1 
You   2 
You   3 
You   4 
You   5 
You   6 
You   7 

正如你所看到的,[HOUR]我的數據丟失4和5。我希望有一個查詢,將輸出:

NAME   HOUR 
Me   4 
Me   5 

現在,這裏就是我的了:

SELECT d.NAME, HR FROM HRs c 
LEFT OUTER JOIN 
    (
    SELECT distinct a.NAME 
    FROM HRLY_DATA a 
    INNER JOIN 
     (
     SELECT NAME FROM 
     (
     SELECT NAME, count(*) as CNT 
     FROM 
      (
      SELECT DISTINCT NAME, HOUR 
      FROM HRLY_DATA 
      ) as i 
     GROUP BY NAME 
     ) as ii 
     WHERE CNT < 8 
    ) as b 
    ON a.NAME=b.NAME 
    ) as d 
ON c.HR=d.HOUR 
WHERE d.HOUR IS NULL 

的HR

HR 
0 
1 
2 
3 
4 
5 
6 
7 

我得到這樣的輸出:

爲HOUR
NAME   HR 
NULL   4 
NULL   5 

數據將只範圍從0 - 7 ..

順便說一句,我使用這個SQL SERVER/MSSQL。

:(

很抱歉,如果我不能解釋清楚我的問題:(

+0

哪一個是您的數據庫?數據總是會在0到7的範圍內嗎? – TechDo

+0

是的。數據的範圍只會從0到7 ..我是usin g SQL SERVER。 –

+0

什麼是HR?在那裏查詢? –

回答

3

請嘗試:

select 
    distinct x.NAME, number HOUR 
From 
    master.dbo.spt_values cross join HRLY_DATA x 
where number between 0 and 7 
except 
select NAME, HOUR FROM HRLY_DATA 

由於表HR包含數據0-7,嘗試:

select 
    distinct NAME, HR 
From 
    @HR cross join HRLY_DATA 
except 
select * from HRLY_DATA 
+0

它完成了數據,但沒有返回失蹤。我不知道如何才能返回缺失的數據。 –

+0

@KrisEdison請檢查編輯後的答案。 – TechDo

+0

它不會返回任何內容。 –