Ищем все дельты в колонке в Vertica

Я ищу способ получить все изменения значений в определенном столбце в Vertica с помощью SQL. Вот пример ...

Дата Имя Местоположение

01.01.2014 Джо Атланта

1/2/2014 Джо Атланта

03.01.2014 Джо Атланта

4 января 2014 г. Джо Бостон

05.01.2014 Джо Бостон

6 января 2014 г. Джо Атланта

07.01.2014 Джо Атланта

8 января 2014 г. Джо Нью-Йорк

09.01.2014 Джо Нью-Йорк

(Извините, я не разрешил опубликовать изображение)

Мне нужны только те строки, где Джо сделал первый ход. Но мне понадобится Атланта дважды, а некоторые строки являются дубликатами, которые не показаны в примере.

Фактический источник данных намного больше, с сотнями «дубликатов» на человека (представьте, что была бы строка для каждой улицы, на которой Джо был в тот день в каждом городе). Кроме того, мы делаем это для миллиона или около того людей в городе. та же таблица.

Я смирился с тем, что мне, скорее всего, потребуется создать временную таблицу, отсортировать по имени, затем по дате, но я не уверен, как получить всю необходимую информацию, не обращаясь к программному решению (писать что-то на C #)

Можно ли сказать что-то вроде «Если текущий город не равен городу на строку вверх, возьмите эту строку»? Я не думаю, что есть, но я немного растерялся.

Спасибо


person JasonWH    schedule 11.03.2015    source источник


Ответы (1)


вы можете решить эту задачу, используя функцию LAG, которую можно использовать для получения данных предыдущей строки.

select * from TestTable1

;with cte as(
select date,Name
,LAG (Location) over (order by date) as PreviousLocation
,Location
,LEAD(Location) over (order by date) as NextLocation 
from TestTable1
)
select date,Name,PreviousLocation,Location,NextLocation
from cte
where PreviousLocation is null or PreviousLocation <> Location

Здесь я использовал CTE (обычное табличное выражение). и я извлекаю предыдущее и следующее местоположение для вашей справки. используйте только предыдущее местоположение для окончательного запроса.

Результат будет следующим.

введите описание изображения здесь

вы можете выбрать только Date, Name, Location из CTE для вашего окончательного запроса

Спасибо

person Kasun Sameera Madhusanka    schedule 11.03.2015
comment
Просто протестировал это, и он делает именно то, что мне нужно! Я очень ценю помощь. - person JasonWH; 11.03.2015