查找ID的行,其中值在SQL中的任何列中都会更改

时间:2018-09-14 08:34:32

标签: sql amazon-redshift

我有一张桌子,上面有10列,其中唯一标识符是id列。 我需要打印所有行,其中任何给定id的值都会更改为10个列中的任何一个。 例如:

Id  name    city    state   address mail    phn number  store no    business name   date
1   adam    california  ca  acbb street xyz@gmail.com   12345   456 abc pvt 01-01-2017
1   adam    newyork Ny  avc xyz@gmail.com   12345   456 abc pvt 11-03-2018
1   adam    newyork Ny  avc xyz@gmail.com   12345   456 abcd pvt    24-03-2018
2   brian   dallas  Tx  sasa    sasa@gmail.com      21212   dsdssd ltd  01-01-2017
2   brian   dallas  Tx  sasa    sasa@gmail.com  232323  21212   dsdssd ltd  01-01-2017
3   donald  dallas  Tx  qwer    qwwqw@gmail.com 2121212 435345  sffsss ltd  23-01-2017

如上所示,对于ID 1,城市状态地址从第一行更改为第二行,因此应该出现。对于ID 1,第三行仅更改商户名称,因此也应打印出来。 因此,基本上对于一个ID,应该检查该ID在该日期之前的状态,并且如果任何列中有任何更改,都应该打印出来。 ID 2也是一样。ID3只有一个条目,因此不应打印。

需要根据ID的日期进行检查。

我拥有的数据集有数百万个,因此需要进行微调的查询。

1 个答案:

答案 0 :(得分:0)

如果您有一列用于行号(例如ROWID),则可以简单地选择先前记录中具有一对(基于ID)的所有行,并检查最后一行是否与第一行不同:

select a.* from [yourTable] a
inner join [yourTable] b
on a.Id = b.Id where a.RowId > b.RowId 
and (a.name <> b.name OR a.city <> b.city OR a.state <> b.state OR a.address <> b.address ... )