查找 SQL 中任意列中值发生变化的 id 行

问题描述 投票:0回答:1

我有一个包含 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 的日期进行检查。

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

sql amazon-redshift
1个回答
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 ... )
© www.soinside.com 2019 - 2024. All rights reserved.