【问题标题】:Non null value associated with least value in other column与其他列中的最小值关联的非空值
【发布时间】:2021-12-24 03:42:07
【问题描述】:

我的数据是这样的:

期望的输出:

我尝试过使用以下 SQL:

CASE 
    WHEN (MINDAY_DIFF > 0) AND (MINDAY_DIFF IS NOT NULL) 
        THEN FIRST_VALUE(BP_MED) OVER (PARTITION BY ID ORDER BY MINDAY_DIFF ASC) 
END AS DRUG

这将返回 NULL。

我也试过

CASE 
    WHEN (MINDAY_DIFF > 0) 
        THEN BP_MED 
        ELSE NULL 
END AS DRUG

它返回BP_MED 的两个非空值。

我也试过NVL,但也没有用。

因为它在 Netezza。网上的解决方案较少。请帮忙。

【问题讨论】:

    标签: sql netezza


    【解决方案1】:

    这里的概念是由内而外的:

    我们并不总是有分析来让事情变得更容易:所以不知道 Netezza,我采取了一种更...过时的方法。可能有更好/更有效的方法;我会寻找一个可以玩耍的地方;但我认为这适用于大多数 RDBMS,因为我试图避免任何 RDBMS 特定方面,除非我们正在处理支持预左连接的 RDBMS。

    • 在结果集 (MinAndID) 中查找最小 ID 和该 ID 的天差
    • LEFT 连接回 baseSet 以获取所有可能的值,专门用于获取 BP_Med
    • 然后加入基表以确保我们获得所有记录,然后仅填充链接到 minDay_Diff 的 BP_Med。由于它是左连接,因此每个 ID 只应返回 1 条记录。

    未经测试:

    SELECT A.*, DesiredDrug.BP_MED 
    FROM TABLE A
    LEFT JOIN (SELECT ID, Fill_Date, BP_MED, MinDay_Diff
               FROM TABLE BaseSet
               INNER JOIN (SELECT MIN(MINDAY_DIFF) MDD, ID
                           FROM TABLE
                           WHERE ID is not null
                           GROUP BY ID) MinAndID
                  on BaseSet.ID = MinAndID.ID
                 and BaseSet.MinDay_Diff = MinAndID.MDD) DesiredDrug
     on A.ID = DesiredDrug
    and A.Fill_Date = DesiredDrug.Fill_Date
    and A.BP_Med= DesiredDrug.BP_Med
    and A.MinDay_Diff = DesiredDrug.MinDay_Diff
    

    【讨论】:

      猜你喜欢
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多