【发布时间】:2014-07-30 16:23:48
【问题描述】:
我有一个住院治疗数据集(“咒语”) - 每个咒语 1 行。我想删除一个接一个一周内记录的任何咒语(可能有多个) - 理由是它们可能是相同根本原因的症状。这是一些播放数据:
create table hif_user.rzb_recurse_src (
patid integer not null,
eventdate integer not null,
type smallint not null
);
insert into hif_user.rzb_recurse_src values (1,1,1);
insert into hif_user.rzb_recurse_src values (1,3,2);
insert into hif_user.rzb_recurse_src values (1,5,2);
insert into hif_user.rzb_recurse_src values (1,9,2);
insert into hif_user.rzb_recurse_src values (1,14,2);
insert into hif_user.rzb_recurse_src values (2,1,1);
insert into hif_user.rzb_recurse_src values (2,5,1);
insert into hif_user.rzb_recurse_src values (2,19,2);
只有类型 2 的咒语 - 在任何其他咒语之后的一周内 - 才能被丢弃。类型 1 法术将保留。
对于患者 1,应保留日期 1 和 9。对于患者 2,应保留所有行。
问题出在患者 1 上。由于接近于拼写日期 5,拼写日期 9 被确定为丢弃;但是,由于拼写日期 5 接近于拼写日期 1,因此应删除拼写日期 9,因此应保留拼写日期 9...
所以,这似乎是一个递归问题。但是,我以前没有在 SQL 中使用过递归编程,我正在努力想象如何做到这一点。任何人都可以帮忙吗?我应该补充一点,我使用的 Teradata 比大多数递归 SQL 具有更多限制(我相信只允许 UNION ALL 集)。
【问题讨论】:
-
您的
eventdate是以天为单位存储的吗? -
是的,应该说。
标签: sql teradata recursive-query