我的数据如下:
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
我需要一个查询,它会在run 2中返回新条目
run | line | checksum | group
-----------------------------
2 | 4 | 124 | 2
2 | 4 | 124 | 2
我尝试了几件事,但我从来没有得到满意的答案。 在这种情况下,我正在使用H2,但当然我对一般解释感兴趣,这将有助于我理解这个概念。
修改 好的,这是我在这里发表的第一篇文章,所以请原谅,如果我没有说清楚这个问题的话。
基本上给出两个运行值(r1,r2,其中r2> r1)我想确定哪些行= r2具有不同的行,校验和或来自行= r1的行的组。
答案 0 :(得分:0)
select * from yourtable
where run = 2 and checksum = (select max(checksum)
from yourtable)
答案 1 :(得分:0)
假设您的上次运行将具有比其他运行值更高的运行值,则SQL下面将提供帮助
select * from table1 t1
where t1.run in
(select max(t2.run) table1 t2)
<强>更新强>
上面的SQL可能无法为您提供正确的行,因为您的要求不是那么清楚。但总体思路是根据最新的运行参数获取行。
答案 2 :(得分: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
)
答案 3 :(得分: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
顺便提一下,我假设你的表中的“group”列实际上并不被称为group - 这是SQL中的保留字,需要用双引号(或反引号或方括号)括起来,具体取决于哪个RDBMS你正在使用)。