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

时间:2012-02-16 09:58:34

标签: 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     |  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的行的组。

4 个答案:

答案 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你正在使用)。