【问题标题】:Sql function find date difference between two consecutive rows per groupSql函数查找每组两个连续行之间的日期差异
【发布时间】:2022-01-20 09:18:50
【问题描述】:

我正在研究临床数据,通过查找日期差异来查找患者的总疗程。我可以使用 Python 实现这一点,但 power bi 不支持该脚本。所以我需要帮助才能在 SQL 中做到这一点。我是 SQL 的初级用户,所以不知道如何开始。

以下是原始数据

PatientID SessionDate
264 5/26/2021
264 5/27/2021
264 5/28/2021
264 5/19/2021
264 5/20/2021
264 5/21/2021
264 5/24/2021
264 5/25/2021
264 5/17/2021
264 5/18/2021
281 5/18/2021
281 5/25/2021
281 6/29/2021
281 6/1/2021
281 4/16/2020
281 4/23/2020
281 4/21/2020
281 4/28/2020
281 4/30/2020
281 5/5/2020
281 10/16/2019

预期输出如下

【问题讨论】:

  • DATEDIFF(date, LAG(date))
  • 我会试试这个。谢谢!
  • 嗨@Akina,我能够得到结果。但是有一个问题。我的日期列中有时间戳。我使用 Cast 将其转换为日期。但我无法在 LAG 函数中使用它,因此它给出的值是 1900-01-01 00:00:00.000 而不是零。你能建议如何解决这个问题吗?提前致谢
  • 提供源数据不是表格,而是 CREATE TABLE + INSERT INTO 脚本。
  • @Akina。谢谢你指引我正确的方向。我能够构建一个查询,它给了我所需的输出

标签: mysql sql


【解决方案1】:

根据@Akina 提示,我能够从以下查询中获得所需的输出 注意:- 我的 sessionDate 列是日期和时间戳格式。

select
        t.PatientID,

        CAST(t.SessionTimestamp as Date) as SessionDate,

        LAG(t.SessionTimestamp) over(partition by t.PatientRecordId order by t.PatientID,t.SessionTimestamp) as Next_Date  


from mytable t

order by
t.PatientID,
t.SessionTimestamp

【讨论】:

    猜你喜欢
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 2012-04-17
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2020-10-21
    相关资源
    最近更新 更多