首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TSQL Self Join:排除已设置条件的连续ID记录

TSQL Self Join:排除已设置条件的连续ID记录
EN

Stack Overflow用户
提问于 2012-09-29 03:00:02
回答 1查看 256关注 0票数 0

我有一个表,如下:

代码语言:javascript
复制
ID, DATE, STATUS
1, 01JAN2012, STOP
1, 04JAN2012, RESTART
2, 01JAN2012, STOP-1
3, 10JAN2012, STOP
4, 15JAN2012, RESTART
5, 01JAN2012, STOP-1
5, 04JAN2012, STOP-2
5, 10JAN2012, STOP
5, 15JAN2012, RESTART

预期输出:

代码语言:javascript
复制
ID, DATE, STATUS
2, 01JAN2012, STOP-1
3, 10JAN2012, STOP
4, 15JAN2012, RESTART
5, 01JAN2012, STOP-1
5, 04JAN2012, STOP-2

我希望SELECT语句排除具有相同ID的所有记录(STATUS='RESTART')和一个连续的前一个记录(如果可用)。

EN

回答 1

Stack Overflow用户

发布于 2012-09-29 03:50:19

我不太确定如果连续两次重启会发生什么,但除非有这样的复杂情况,我认为你可能想要这样的东西:

代码语言:javascript
复制
;WITH myTable AS(
SELECT *,ROW_NUMBER() OVER (PARTITION BY ID ORDER BY [DATE]) AS rn
FROM OriginalTable
)
SELECT this.ID, this.DATE, this.STATUS
FROM myTable this
LEFT OUTER JOIN myTable prev ON prev.ID = this.ID and prev.rn = this.rn-1
LEFT OUTER JOIN myTable nxt ON nxt.ID = this.ID and nxt.rn = this.rn+1
WHERE NOT ((this.STATUS= 'RESTART' AND prev.STATUS IS NOT NULL)
           OR (COALESCE(nxt.STATUS,'') = 'RESTART'))

我假设您的DATE列的类型是date或datetime,但如果它是一个字符串,则应该将其转换为ROW_NUMBER调用的ORDER BY部分中的日期。

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

https://stackoverflow.com/questions/12645840

复制
相关文章

相似问题

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