在 Vertica 中查找列中的所有增量

Looking for all deltas in a column in Vertica

我正在寻找一种方法来使用 SQL 将值的所有更改获取到 Vertica 中的特定列。这是一个例子...

日期姓名地点

2014 年 1 月 1 日乔·亚特兰大

2014 年 1 月 2 日乔·亚特兰大

2014 年 1 月 3 日乔·亚特兰大

1/4/2014 乔·波士顿

2014 年 1 月 5 日乔·波士顿

2014 年 1 月 6 日乔·亚特兰大

2014 年 1 月 7 日乔·亚特兰大

1/8/2014 乔纽约

1/9/2014 乔纽约

(抱歉,不让我 post 图片)

我只想要 Joe 最初移动的行。但是我会需要Atlanta两次,有些行是重复的,示例中没有显示。

实际数据源要大得多,每人有数百个 "duplicates"。(想象一下,如果乔那天在每个城市的每条街道都有一行)另外,我们这样做是为了大约一百万人 table.

我已经认命了,我很可能需要创建一个临时文件 table,按名称排序,然后按日期排序,但我不确定如何在不查找的情况下获取我需要的所有信息一个编程解决方案(用 C# 编写一些东西)

可以说"When you current city does not equal the city one row up, grab that row"吗?我不认为有,但我有点不知所措。

谢谢

您可以使用 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(常见的 table 表达式)。 然后我为您检索上一个和下一个位置 reference.only 使用上一个位置进行最终查询。

结果如下

您只能select来自 CTE 的日期、姓名、位置用于您的最终查询

谢谢