【问题标题】:Case Statement for Each Group每个组的案例陈述
【发布时间】:2020-12-09 02:26:34
【问题描述】:

感谢您的关注。我正在尝试根据 CASE 语句从现有数据中派生新列,但似乎无法正常工作。

我可以使用 IncidentID、SPECCOLLECTEDDATE 和我已经成功设置的派生列 PN.PositiveNegative,它指示测试是阳性还是阴性。

这就是我想要做的。 IncidentID 有许多重复的实例,在这种情况下,这意味着对于一个 IncidentID,至少存在一个,但有时不止一个,测试存在。对于每组 IncidentID,我想找到:

DateFirstPositive(必填),最早的阳性检测日期
DateLastPositive(可选,最近的阳性测试日期
DateFirstNegative(可选),最早的否定测试日期
DateLastNegative(可选),最近的负日期

我一直在尝试让 CASE 语句与此一起使用,但我似乎无法理解。我正在努力解决的主要问题是如何将 CASE 语句应用于 CROSS APPLY 表达式中的 IncidentID 组。

非常感谢您提供的任何帮助。

【问题讨论】:

  • 一些示例数据、预期输出和您尝试过的代码会很有帮助
  • 仅供参考,它是 case 表达式 not 语句。

标签: sql sql-server group-by case cross-apply


【解决方案1】:

您可以使用条件聚合:

select IncidentID,
       min(case when value > 0 then SPECCOLLECTEDDATE end) as first_positive_date,
       max(case when value > 0 then SPECCOLLECTEDDATE end) as last_positive_date,
       min(case when value < 0 then SPECCOLLECTEDDATE end) as first_negative_date,
       max(case when value < 0 then SPECCOLLECTEDDATE end) as last_negative_date
from t
group by IncidentID;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-11
    • 2023-04-10
    • 2010-10-30
    • 2016-05-13
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多