我試圖顯示用戶的分數在他們最舊的條目和最近的條目之間發生了多少變化。
給定資料:
Timestamp | Score | User
2021-08-25 10:22:00 | 1300 | A
2021-08-24 09:38:00 | 1451 | A
2021-08-21 21:53:00 | 1381 | B
2021-08-21 17:17:00 | 1129 | B
2021-08-24 14:32:00 | 1278 | A
2021-08-21 13:21:00 | 1401 | B
我想產生一個看起來像這樣的輸出:
User | CurrentScore | Change | Timestamp
A | 1300 | -151 | 2021-08-25 10:22:00
B | 1381 | -19 | 2021-08-21 21:53:00
我可以顯示最舊的行和最新的行,但我很難將這兩個行放在一個帶有計算列的輸出行中。任何幫助表示贊賞。
uj5u.com熱心網友回復:
請檢查這是否符合您的需求,請下次不要描述表,而是提供 DDL DML(創建表并插入一些示例資料的查詢)
DDL DML:應該由OP提供!
CREATE TABLE QQ(
[Timestamp] DATETIME2,
Score INT,
[User] VARCHAR(10)
)
INSERT QQ([Timestamp],Score,[User]) VALUES
('2021-08-25 10:22:00',1300,'A'),
('2021-08-24 09:38:00',1451,'A'),
('2021-08-21 21:53:00',1381,'B'),
('2021-08-21 17:17:00',1129,'B'),
('2021-08-24 14:32:00',1278,'A'),
('2021-08-21 13:21:00',1401,'B')
GO
解決方案
;With MyCTE as (
SELECT [user], Score,
[Timestamp] = FIRST_VALUE ([Timestamp]) OVER (PARTITION BY [user] ORDER BY [Timestamp] DESC),
FirstScore = FIRST_VALUE (Score) OVER (PARTITION BY [user] ORDER BY [Timestamp]),
CurrentScore = FIRST_VALUE (Score) OVER (PARTITION BY [user] ORDER BY [Timestamp] DESC)
FROM QQ
)
SELECT DISTINCT [user], CurrentScore, Change = CurrentScore - FirstScore, [Timestamp]
FROM MyCTE
GO
結果

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/313279.html
標籤:sql 查询语句 azure-sql-数据库 sql-server-2014
上一篇:在依賴的多列上旋轉
下一篇:在重復檢查中將空記錄回傳為“0”
