Sql 从同一个表中查找两组数据之间的差异

Sql 从同一个表中查找两组数据之间的差异,sql,h2,Sql,H2,我的数据如下所示: 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

我的数据如下所示:

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),我想确定哪些行的行=r2与行=r1的任何行具有不同的行、校验和或组。

假设上次运行的运行值高于其他行,下面的SQL将有所帮助

select * from yourtable
where run = 2 and checksum = (select max(checksum) 
                              from yourtable)
select * from table1 t1
where t1.run in
(select max(t2.run) table1 t2)
更新:

上面的SQL可能不会为您提供正确的行,因为您的需求不太清楚。但总体思路是根据最新的运行参数获取行

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

EXCEPT

SELECT line, checksum, group 
  FROM TableX
  WHERE run = 1 
或(结果略有不同):


稍微不同的方法:

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

顺便说一句,我假设表中的“group”列实际上不是group,这是SQL中的一个保留字,需要用双引号括起来(或倒勾或方括号,具体取决于您使用的RDBMS).

目前的问题毫无意义……您如何确定一个条目是新的?第二次运行中的新条目是什么意思?我看不到任何数据。
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