大家好 我正面临一个问题,需要查询, 我有一个表格和数据,如
---------- seq_id run_id mark_Flag 1 10 A 2 11 A 3 12 A 4 13 Z 5 14 A 6 15 A 7 16 Z 8 17 Z 9 18 A 10 19 A 11 20 Z ----------
现在我需要像
这样的输出seq runidFrom runidTo mark_Flag 1 10 12 A 2 13 13 Z 3 14 15 A 4 16 17 Z 5 18 19 A 6 20 20 Z
提前致谢....
答案 0 :(得分:3)
尝试此查询的主要想法是按先前Mark_flag
的计数分组,不等于当前
SELECT min(run_id),max(run_id),max(mark_Flag)
FROM T as T1
GROUP BY mark_flag,
(
SELECT COUNT(*) FROM T
WHERE seq_id<T1.seq_id
and
mark_flag<>T1.Mark_flag
)
ORDER BY MIN(seq_id)
此查询必须适用于任何数据库系统,但是当您发布问题时,请使用您的RDBMS添加标记(而不仅仅是 SQL ),以便可以针对您的数据库系统优化查询。 / p>
UPD:这是MS SQL版本:
SELECT min(run_id),max(run_id),max(mark_Flag)
FROM
(
Select run_id, mark_flag,seq_id,
(
SELECT COUNT(*) FROM T
WHERE seq_id<T1.seq_id
and mark_flag<>T1.Mark_flag
) as group_id
From t as T1
) as T2
GROUP BY mark_flag,group_id
ORDER BY MIN(seq_id)