我有一个表,其中包含如下数据:
ID | NAME | DATE | ORDER |
---|---|---|---|
15 | MICHELLE | 2023-01-01 | 2 |
15 | MICHELLE | 2023-01-04 | 3 |
15 | MITCH | 2023-01-15 | 7 |
(这是我的表数据中针对特定id的一个小示例)
我想要一个返回ID的表,以及在特定时间点的值/它更改为什么
例如,我希望我的表看起来像
ID | NAME | FROM_DATE | TO_DATE |
---|---|---|---|
15 | MICHELLE | 2023-01-01 | 2023-01-15 |
15 | MITCH | 2023-01-15 | 2023-03-10 |
其中,对于给定id的最后一个值,其to_date将是当前日期.
我已经做了
SELECT ID,
LAG(NAME) OVER (PARTITION BY ID ORDER BY ORDER) AS NAME,
LAG(DATE) OVER (PARTITION BY ID, ORDER BY ORDER) AS FROM_DATE,
DATE AS TO_DATE
FROM MY_TABLE
然而,这一切正在回归
ID | NAME | FROM_DATE | TO_DATE |
---|---|---|---|
15 | MICHELLE | 2023-01-01 | 2023-01-04 |
15 | MICHELLE | 2023-01-04 | 2023-01-15 |
而不是仅仅把米歇尔放在一行,因为从2023-01-01到2023-01-15没有变化,我无法证明米歇尔的名字已经从米歇尔改为米奇,而且这种变化一直持续到今天(因为之后没有记录)
我有什么办法可以做到这一点吗?谢谢!