【问题标题】:Group_By Persons and Return the Maximum Row NumberGroup_By 人员并返回最大行数
【发布时间】:2020-01-08 13:34:17
【问题描述】:

我正在尝试设置数据来运行生存模型。数据是时间序列的。重要的列是名称、BeginningDateofStudyDeathDate。我想做的是使用 CASE 语句,如果这个人已经死了,那么只有他们的最后一行被赋予 1 的值。

例如,如果人 A 有一个BeginningDateofStudy = 01/07/2019 和他们的DeathDate = 01/08/2020,那么他们将有 12 行数据(每个月 1 行)并且只有创建的新列才会报告第 12 行等于 1,直到 12 的其他行等于 0。

实际上,我对如何处理这个问题感到很困惑。到目前为止,我已经尝试按名称返回最大行号,但我也没有运气。我尝试过的最好的尝试可能是:

MAX(row_number()) over(partition by name order by name, processdate desc) as MaxRow

【问题讨论】:

  • 样本数据和期望的结果会有很大帮助——一个合适的数据库标签。

标签: sql r sql-server case survival-analysis


【解决方案1】:

没有看到数据/期望的结果,我只能假设您正在尝试做这样的事情。我使用 CASE 语句检查 max processdate 和 deathdate 并相应地分配 1 和 0。如果这不是你想要的,那么你应该提供请求的数据/输出/

SELECT 
    Name
    , BeginningDateofStudy
    , DeathDate
    , 
        CASE 
            WHEN DeathDate IS NOT NULL AND ProcessDate=(SELECT MAX(ProcessDate) FROM SurvivalMode WHERE Name=s.Name) THEN 1
            WHEN (SELECT COUNT(DeathDate) FROM SurvivalModel WHERE Name=s.Name)>0 THEN 0
            END AS DeadValue
FROM
    SurvivalModel s

【讨论】:

    【解决方案2】:

    另一种方法,假设处理日期不超过死亡日期:

    SELECT 
        Name
        , BeginningDateofStudy
        , DeathDate
        , CASE 
                WHEN DeathDate IS NOT NULL AND MONTH(Processdate)=MONTH(Deathdate) and YEAR(Processdate)=Year(Deathdate) then 1
                ELSE 0
                END AS DeadValue
    FROM
        SurvivalModel s
    

    但是,如果处理日期超过死亡日期的月份,此方法将失败。

    【讨论】:

      猜你喜欢
      • 2018-01-28
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      相关资源
      最近更新 更多