首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择在SQL中其他值最后出现后的值的第一次出现。

选择在SQL中其他值最后出现后的值的第一次出现。
EN

Stack Overflow用户
提问于 2021-03-04 20:37:22
回答 6查看 210关注 0票数 0

我有一个要求,要找到一个部分的当前运作。我必须从complete (1)或0的列表操作状态中获取此信息。因此,该表通常看起来如下:

代码语言:javascript
运行
复制
ID  Operation  Status

 1      100      1
 2      200      1
 3      250      1
 4      300      0
 5      350      0

因此,在本例中,操作300是我使用MIN(运算)获得的当前操作,其中的状态= 0。

但是,出现了一些跳过一些操作的情况,这些操作看起来如下:

代码语言:javascript
运行
复制
ID  Operation  Status

 1     100       1
 2     200       0
 3     250       1
 4     300       0
 5     350       0

因此,在这种情况下,当前的操作仍然是操作300,但MIN(操作)不能工作。我需要的是行的第一次出现,其中的状态=0,在最后一次出现状态=1行之后。我怎样才能做到这一点?

编辑:还必须考虑所有操作状态为0的情况,其中正确的结果将是第一行(操作100)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2021-03-04 21:20:00

这将使您可以使用整个行:

代码语言:javascript
运行
复制
DECLARE @MyTable TABLE (
    ID INT,
    Operation INT,
    Status BIT
);

INSERT INTO @MyTable VALUES
     (1, 100, 1)
    ,(2, 200, 0)
    ,(3, 250, 1)
    ,(4, 300, 0)
    ,(5, 350, 0)
;

WITH MaxOperation AS (
    SELECT MAX(x.Operation) AS MaxOperation
    FROM @MyTable x
    WHERE x.Status = 1
)
SELECT TOP 1 t.*
FROM @MyTable t
    CROSS APPLY (SELECT MaxOperation FROM MaxOperation) x
WHERE t.Operation > x.MaxOperation
    OR x.MaxOperation IS NULL
ORDER BY t.Operation

这将导致:

代码语言:javascript
运行
复制
ID          Operation   Status
----------- ----------- ------
4           300         0

如果所有的Status值都是0,它也会产生这种情况。

代码语言:javascript
运行
复制
ID          Operation   Status
----------- ----------- ------
1           100         0
票数 1
EN

Stack Overflow用户

发布于 2021-03-04 21:17:50

我确信有一种聪明的窗口函数方法可以做到这一点,但是在普通的sql中,这是一个想法。

代码语言:javascript
运行
复制
SELECT MIN(Operation)
  FROM SOME_TABLE
 WHERE Operation > 
         ( SELECT MAX(Operation)
             FROM SOME_TABLE
            WHERE status = 1
         )
票数 1
EN

Stack Overflow用户

发布于 2021-03-04 21:25:14

正如用户Error_2646所指出的,一种很好的方法是

代码语言:javascript
运行
复制
select
    min(ID)
from
    [YourTable]
where
    ID > (select max(ID) from [YourTable] where Status = 1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66482674

复制
相关文章

相似问题

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