我有一个包含 10 列的表,其中唯一标识符是 id 列。
我需要打印 10 列中任意给定 id 的值发生变化的所有行。
例如:
Id name city state address mail phn number store no business name date
1 adam california ca acbb street [email protected] 12345 456 abc pvt 01-01-2017
1 adam newyork Ny avc [email protected] 12345 456 abc pvt 11-03-2018
1 adam newyork Ny avc [email protected] 12345 456 abcd pvt 24-03-2018
2 brian dallas Tx sasa [email protected] 21212 dsdssd ltd 01-01-2017
2 brian dallas Tx sasa [email protected] 232323 21212 dsdssd ltd 01-01-2017
3 donald dallas Tx qwer [email protected] 2121212 435345 sffsss ltd 23-01-2017
如上所示,id 1 的城市州地址从第一行更改为第二行,因此应该出现。另外,对于 id 1,第三行仅更改公司名称,因此也应该打印出来。
所以基本上对于一个 id,应该检查该 id 在该日期之前的状态,如果任何列中有任何更改,则应该打印它。
id 2 也是如此。对于 id 3,只有一个条目,因此不应打印。
需要根据 ID 的日期进行检查。
我拥有的数据集有数百万,因此需要微调查询。
如果您有行号列(例如 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 ... )