sql - 如何透视下一个 ROW_NUMBER()

标签 sql sql-server sql-server-2016

我有一个由以下查询填充的临时表:

SELECT  att.property, att.stayDate, att.addedTimeStamp, att.rowNumber
    FROM
    (
    SELECT  RIGHT('000' + CAST(att.property AS VARCHAR(4)),4) AS property,
            CAST(att.stay_date AS DATE) AS stayDate,
            CAST(added_timestamp AS DATETIME) AS addedTimeStamp,
            ROW_NUMBER() OVER(PARTITION BY property, stay_date ORDER BY added_timestamp) AS rowNumber
        FROM dbo.tb_rm_portal_attention_days att
            WHERE att.revenue_initiative = 'Test'
    ) att

然后将以下内容放入临时表中:

property   stayDate     addedTimeStamp             rowNumber
0053       2020-03-20   2019-03-04 17:10:32.837    1
0053       2020-03-20   2019-03-05 17:10:29.480    2
0053       2020-03-20   2019-03-06 17:10:25.940    3
0053       2020-03-20   2019-03-07 17:10:21.930    4
0100       2020-03-25   2019-03-04 17:10:32.837    1
0100       2020-03-25   2019-03-05 17:10:29.480    2
0100       2020-03-25   2019-03-06 17:10:25.940    3
0100       2020-03-25   2019-03-07 17:10:21.930    4

离开这里,我想要属性stayDateaddedTimeStamp,然后是下一个addedTimeStamp > 在组中,如果是返回 NULL 或其他什么的最大值...不确定这是否有意义...

我的最终目标是从临时表中获取以下内容:

property   stayDate      firstTimeStamp            secondTimeStamp
0053       2020-03-20    2019-03-04 17:10:32.837   2019-03-05 17:10:29.480
0053       2020-03-20    2019-03-05 17:10:29.480   2019-03-06 17:10:25.940
0053       2020-03-20    2019-03-06 17:10:25.940   2019-03-07 17:10:21.930
0053       2020-03-20    2019-03-06 17:10:25.940   NULL
0100       2020-03-25    2019-03-04 17:10:32.837   2019-03-05 17:10:29.480
0100       2020-03-25    2019-03-05 17:10:29.480   2019-03-06 17:10:25.940
0100       2020-03-25    2019-03-06 17:10:25.940   2019-03-07 17:10:21.930
0100       2020-03-25    2019-03-06 17:10:25.940   NULL

最佳答案

您需要 lead(),但不需要子查询:

SELECT RIGHT('000' + CAST(att.property AS VARCHAR(4)), 4) AS property,
       CAST(att.stay_date AS DATE) AS stayDate,
       CAST(added_timestamp AS DATETIME) AS firstTimeStamp,
       LEAD(added_timestamp) OVER (PARTITION BY property, stay_date ORDER BY added_timestamp) AS secondTimeStamp
FROM dbo.tb_rm_portal_attention_days att
WHERE att.revenue_initiative = 'Test'

关于sql - 如何透视下一个 ROW_NUMBER(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55072414/

相关文章:

sql - 如何将一个巨大的表数据复制到SQL Server中的另一个表中

SQL:查找子图

sql-server - SQL Server : group by column with another column

sql-server - 使用 SSDT 2016 部署报告会生成错误

SQL 将日期/时间转换为 unix 时间戳

sql - 获取不同记录的问题(分组依据)

sql - 大查询 : find following row matching condition

mysql - 我怎样才能连接这个结果集?

sql-server - TRY_PARSE 使函数非确定性

sql-server - SQL 将顺序时间序列集折叠在一起