首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要计算顺序中的下一个里程碑

需要计算顺序中的下一个里程碑
EN

Stack Overflow用户
提问于 2021-05-11 07:22:20
回答 1查看 39关注 0票数 1

我有一个像这样的数据集

我想根据序列号为ID计算下一个临床里程碑。例如,对于665,根据序列,下一个临床里程碑应该是DBF,因为它在实际列中没有任何日期(我们需要忽略中间值,如FPA和FCI,在这些中间值中,数据不存在列实际,因为数据非常脏,日期可以相对于最后一列顺序更小)。

在另一种情况下,ID的实际列中的所有数据都为空,在这种情况下,该临床里程碑的第一个非空计划列值应该是下一个。

在ID 666中,CPC应该是下一个临床里程碑。

考虑到使用滞后函数,也使用最大值的实际ID,但不确定它将如何工作,当两行有相同的实际日期。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-11 07:26:59

使用MAX() OVER ()和一个CASE表达式计算每个id的当前序列值,然后在此基础上进行筛选。

代码语言:javascript
复制
WITH
  resequenced AS
(
  SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY id ORDER BY sequence)  AS new_sequence
  FROM
    yourTable
  WHERE
       actual  IS NOT NULL
    OR planned IS NOT NULL
),
  summarised AS
(
  SELECT
    *,
    MAX(CASE WHEN actual IS NOT NULL THEN new_sequence ELSE 0 END) OVER (PARTITION BY id)  AS last_sequence
  FROM
    resequenced
)
SELECT
  *
FROM
  summarised
WHERE
  new_sequence = last_sequence + 1

编辑:适应于处理actualplanned列中的空白。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67482209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档