【问题标题】:TSQL Calculate difference between oldest and newest rowTSQL计算最旧和最新行之间的差异
【发布时间】:2021-11-27 17:49:38
【问题描述】:

我试图显示用户的分数在他们最旧的条目和最近的条目之间发生了多少变化。

给定数据:

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

我可以显示最旧的行和最新的行,但我很难将两者放在一个带有计算列的输出行中。任何帮助表示赞赏。

【问题讨论】:

    标签: sql tsql azure-sql-database sql-server-2014


    【解决方案1】:

    请检查这是否符合您的需求,请下次不要描述表格,而是提供 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
    

    结果

    【讨论】:

    • 谢谢,下次有SQL问题我记得加DDL+DML。我不知道有关 SQL Server 问题的协议。
    • 不客气:-)
    • 您应该使用ROWS UNBOUNDED PRECEDING 以防时间戳重复。它也更有效
    猜你喜欢
    • 2022-01-16
    • 2015-04-03
    • 1970-01-01
    • 2023-02-16
    • 2017-05-31
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多