我正在寻找如何跟踪我所拥有的表中的值更改,因为我目前希望能够捕获该属性的第一个日期,但如果我有一个属性A变为属性B的场景,则会失败几天后,然后在几周后再次回到属性A.
以下是我的数据集:
Attributes | DateTime
A | 01/08/2017 00:01:45
A | 02/08/2017 00:30:00
B | 03/08/2017 00:45:57
A | 07/08/2017 13:00:00
现在我可以写下以下内容:
SELECT Attributes, MIN(DateTime);
给了我:
Attributes | DateTime
A | 01/08/2017 00:01:45
B | 03/08/2017 00:45:57
但我想要的是能够再次看到属性A,但不确定我是如何去做的。
Attributes | DateTime
A | 01/08/2017 00:01:45
B | 03/08/2017 00:45:57
A | 07/08/2017 13:00:00
如果有人可以建议我如何做这件事,我将不胜感激。
提前致谢。
答案 0 :(得分:1)
您可以使用LAG()
与上一条记录进行比较:
SELECT p.*
FROM(
SELECT t.*
LAG(t.attributes) OVER(ORDER BY t.DateTime) as Last_Atrribute
FROM YourTable t) p
WHERE p.attributes <> p.last_attribute
如果您总是想要第一条记录,请将WHERE
更改为:
WHERE p.attributes <> COALESCE(p.last_attribute,'-1')
或换句话说:
WHERE p.last_attribute IS NULL OR p.attributes <> p.last_attribute
当然,您可以更改查询以仅选择预期的列。我使用了*
星号。
答案 1 :(得分:0)
使用LAG
分析函数:
SELECT attributes,
datetime
FROM (
SELECT attributes,
datetime,
LAG( Attributes ) OVER ( ORDER BY DateTime ) AS prev_attributes
FROM your_table
)
WHERE prev_attributes IS NULL
OR attributes <> prev_attributes