2012-02-16 40 views
0

我的數據是這樣的:來自同一個表查找兩組數據之間的差異

run | line | checksum | group 
----------------------------- 
1 | 3 | 123  | 1 
1 | 7 | 123  | 1 
1 | 4 | 123  | 2 
1 | 5 | 124  | 2 
2 | 3 | 123  | 1 
2 | 7 | 123  | 1 
2 | 4 | 124  | 2 
2 | 4 | 124  | 2 

,我需要返回我的新條目在運行2

run | line | checksum | group 
----------------------------- 
2 | 4 | 124  | 2 
2 | 4 | 124  | 2 

我試着查詢幾件事情,但我從來沒有得到一個令人滿意的答案。 在這種情況下,我使用H2,但當然我對一般性解釋感興趣,這將有助於我將這些概念包裹起來。

編輯: 好的,這是我的第一篇文章,所以請原諒,如果我沒有足夠的說明問題。

基本上給出兩個運行值(r1,r2,r2> r1)我想確定row = r2的哪些行具有不同的行,校驗和或任何行的校驗和或組。

+2

問題沒有意義,因爲它代表... – 2012-02-16 10:01:28

+5

你如何確定一個條目是新的? – 2012-02-16 10:01:42

+0

運行2中的新條目是什麼意思?我沒有看到數據記錄。 – 2012-02-16 10:03:40

回答

0
select * from yourtable 
where run = 2 and checksum = (select max(checksum) 
           from yourtable) 
0

假設你的最後一次運行將有比別人更高的運行值,SQL下面將幫助

select * from table1 t1 
where t1.run in 
(select max(t2.run) table1 t2) 

更新:

上面的SQL可能不會給你正確的行,因爲你要求不是很清楚。但總體思路是根據最新的運行參數獲取行。

0
SELECT line, checksum, group 
    FROM TableX 
    WHERE run = 2 

EXCEPT 

SELECT line, checksum, group 
    FROM TableX 
    WHERE run = 1 

或(具有稍微不同的結果):

SELECT * 
    FROM TableX x 
    WHERE run = 2 
    AND NOT EXISTS 
     (SELECT * 
      FROM TableX x2 
      WHERE run = 1 
      AND x2.line = x.line 
      AND x2.checksum = x.checksum 
      AND x2.group = x.group 
     ) 
0

稍微不同的方法:

select min(run) run, line, checksum, group 
from mytable 
where run in (1,2) 
group by line, checksum, group 
having count(*)=1 and min(run)=2 

順便提及,我認爲在表中的 「組」 列是不實際上稱爲組 - 這是SQL中的一個保留字,需要用雙引號括起來(或反引號或方括號,具體取決於您使用的是哪種RDBMS)。

相關問題