2012-02-16 39 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)。

相关问题