我有一张桌子,上面有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的日期进行检查。
我拥有的数据集有数百万个,因此需要进行微调的查询。
答案 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 ... )