gpt4 book ai didi

SQL如何获取记录直到一条记录不同

转载 作者:行者123 更新时间:2023-12-02 08:35:48 27 4
gpt4 key购买 nike

微软 SQL 2008

我什至不知道怎么表达这个,但我走了;我正在尝试获取标志 = 1 的第一条记录,以及后续记录直到下一条记录标志 = 1,因此记录 1 到 5 将是一组,记录 6 和 7 是另一组,记录 8 到 10 是另一组。

RECORD  FLAG
1 1
2 0
3 0
4 0
5 0
6 1
7 0
8 1
9 0
10 0

我正在考虑使用游标、循环或类似的东西,但我无法让它工作。

这是我尝试过的:

DECLARE db_cursor CURSOR FOR  
SELECT RECORD,FLAG
FROM TABLE
WHERE FLAG = 1

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @Records

WHILE @@FETCH_STATUS = 0
BEGIN

--HERE IM LOST-- HOW TO GET THE RECORDS THAT FOLLOW THE FIRST RECORD WITH FLAG=1

FETCH NEXT FROM db_cursor INTO @Records
END

CLOSE db_cursor
DEALLOCATE db_cursor

最佳答案

您可以附加一个新值来标识每组记录。这个新值是 flag 的累加和:

select t.*,
(select sum(t2.flag)
from table t2
where t2.record <= t.record
) as grp
from table t;

这是标准 SQL,可用于任何查询。所以,如果你想要第一组,你可以这样做:

select record, flag
from (select t.*,
(select sum(t2.flag)
from table t2
where t2.record <= t.record
) as grp
from table t
) t
where grp = 1
order by record;

SqlFiddle 演示:http://sqlfiddle.com/#!3/40bf7/4

编辑:

你没有提到数据库。在某些数据库(Oracle、Teradata、DB2、Postgres 和 SQL Server 2012)中,您有一个累计和。它通常看起来像这样:

select t.*, sum(flag) over (order by record) as grp
from table t

这个语法做同样的事情。

关于SQL如何获取记录直到一条记录不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21740821/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com