我正在处理查询请求,需要一些帮助。
我试图找出一个案例,当陈述存在6个月的间隔时,然后获取下一个数字;当陈述没有6个月的间隔时,然后获取所有这些。
示例1 :
ID Gap
1 0
2 4
3 1
4 8
5 1
6 6
7 1
因此,在此示例中,有一个8的缺口,所以如果这是唯一的缺口> = 6,那么我将抓住那个缺口,但是由于还有另一个6的缺口,我只想获取ID 7。
示例2:
ID Gap
1 0
2 1
3 0
4 2
5 0
因此,在此示例中,没有间隙。所以我想获取所有这些ID。
这一切都在sql中
答案 0 :(得分:3)
好吧,您可以使用窗口功能:
select id, gap
from (select t.*,
max(case when gap >= 6 then id end) over (order by id) as id_6
from t
) t
where id > id_6 or id_6 is null;
答案 1 :(得分:0)
使用光标,未在SSMS上进行测试。这是另一种方法,不是最好的方法,但这是我的个人训练。
IF EXISTS (SELECT * FROM table WHERE Gap >= 6)
BEGIN
DECLARE @id AS INT;
DECLARE @gap AS INT;
DECLARE @id2 AS INT;
DECLARE @gap2 AS INT;
DECLARE gap_cursor CURSOR FOR
SELECT ID, Gap
FROM table;
OPEN gap_cursor;
FETCH NEXT FROM gap_cursor INTO @id, @gap;
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@gap >= 6)
BEGIN
FETCH NEXT FROM gap_cursor
INTO @id, @gap;
SET @id2 = @id;
SET @gap2 = @gap;
END
ELSE
BEGIN
FETCH NEXT FROM gap_cursor INTO @id, @gap;
END
END
SELECT @id2, @gap2;
END
ELSE
BEGIN
SELECT *
FROM table;
END