我有一個如下的快照表
| ID | 姓名 | 價值 | 日期 |
|---|---|---|---|
| 123 | ABC公司 | 500 | 昨天 |
| 123 | ABC公司 | 500 | 今天 |
| 456 | XYZ有限公司 | 700 | 今天 |
| 123 | ABC公司 | 500 | 明天 |
| 456 | XYZ有限公司 | 700 | 明天 |
| 789 | PQR 咨詢 | 100 | 明天 |
我想使用 sql 從上面的快照表中獲取新行,如下表所示
| ID | 姓名 | 價值 | 日期 |
|---|---|---|---|
| 456 | XYZ有限公司 | 700 | 今天 |
| 789 | PQR 咨詢 | 100 | 明天 |
我需要一個指標是否遵循視窗函式(如 LAG() 等)來獲取新表。或更簡單的解決方案有嗎?提前致謝!
uj5u.com熱心網友回復:
這里有幾個選項,一個是使用 cte 或派生表添加row_number基于日期列到表中,另一個是使用first_value視窗函式。我很確定派生表解決方案在性能方面會更好,但我沒有時間測驗。這是我要做的:
;WITH cte AS
(
SELECT id, name, value, date, ROW_NUMBER() OVER(PARTITION BY id ORDER BY date DESC) as rn
FROM snapshotTable
)
SELECT id, name, value, date
FROM cte
WHERE rn = 1;
要獲得最早的記錄,您需要做的就是DESC從order by子句中洗掉 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/514563.html
標籤:sqltsql天蓝色突触
下一篇:將字串轉換為日期
