sql代码比较系列中的上一行

WDK

因此,我有一个具有ArticleID(GUID),RevisionNumber(整数)和StatusCode(文本)的表。文章可以具有任意数量的修订版本,但是每次创建新修订版本时,上一个修订版本的StatusCode应该为“已修订”,而最新修订版本的StatusCode可以为“有效”或“草稿”或“取消”。但是,数据混乱了,我需要确定哪些记录(千个中的十个)没有正确的状态。样本数据:

Article ID     RevisionNumber     StatusCode
==========     ==============     ==========
xx-xxxx-xx            7             Active
xx-xxxx-xx            6            Revised
xx-xxxx-xx            5             Active
xx-xxxx-xx            4              Draft
xx-xxxx-xx            3            Revised
xx-xxxx-xx            2             Active
xx-xxxx-xx            1            Revised
xx-xxxx-xx            0            Revised
xx-yyyy-yy            1             Active
xx-yyyy-yy            0             Active

在上述情况下,我需要知道xx-xxxx-xx修订版5、4和2的状态不正确,并且xx-yyyy-yy修订版0不正确。如何使用sql server 2012从sql查询中获取此信息?

暴风雨

如果存在更高版本的修订号,则标识不属于“修订版”的任何修订版。

那么似乎只是知道最新版本是什么。
一个MAX OVER可以做到的。

SELECT ArticleID, RevisionNumber, StatusCode
FROM
(
    SELECT ArticleID, RevisionNumber, StatusCode
    , MAX(RevisionNumber) OVER (PARTITION BY ArticleID) AS MaxRevisionNumber
    FROM YourTable
) q
WHERE (RevisionNumber < MaxRevisionNumber AND StatusCode != 'Revised')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章