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