Microsoft SQL 2008
我甚至不知道怎么说这个,但我走了;我试图获得flag = 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
答案 0 :(得分:5)
您可以附加标识每组记录的新值。此新值是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
这种语法做同样的事情。