Найти строки для идентификатора, где значение изменяется в любом столбце в sql - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть таблица с 10 столбцами, где уникальный идентификатор - это столбец идентификатора. Мне нужно напечатать все строки, где значение для любого данного идентификатора изменяется для любого из 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

Как показано выше для идентификатора 1, происходит изменение с первой строки на 2-ю строку по адресу штата, поэтому должно быть указано. Кроме того, для идентификатора 1 3-я строка изменяет только название компании, что также должно быть напечатано. Таким образом, в основном для идентификатора следует проверять статус этого идентификатора до этой даты, и если есть какие-либо изменения в каком-либо столбце, он должен быть напечатан. То же самое относится и к идентификатору 2. Для идентификатора 3 есть только одна запись, поэтому ее не следует печатать.

Проверка должна быть выполнена на основе даты для идентификатора.

Набор данных, который у меня есть, исчисляется миллионами, поэтому потребуется тонко настроенный запрос.

1 Ответ

0 голосов
/ 14 сентября 2018

Если у вас есть столбец для номера строки (например, ROWID), вы можете просто выбрать все строки, в которых есть пара (на основе идентификатора) в предыдущих записях, и проверить, отличается ли какой-либо из столбцов последней строки от первого:

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 ... )
...