Sql 如何按组排列序列范围
大家好 我面临一个问题,需要一个问题, 我有一个表格和数据,比如 现在我要求输出如下 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 ZSql 如何按组排列序列范围,sql,group-by,sequence,Sql,Group By,Sequence,大家好 我面临一个问题,需要一个问题, 我有一个表格和数据,比如 现在我要求输出如下 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
提前谢谢 尝试此查询主要思想是按不等于当前标记的上一个标记的计数分组
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,以便查询可以针对您的数据库系统进行优化
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)
欢迎来到StackOverflow!在这个网站上,你应该展示你解决问题的方法——这样我们就可以说你的代码出了什么问题。更多信息请参见第页您使用的数据库是什么?我不确定所有数据库是否都允许group by语句中的子查询。通过将其添加到select并将其设置为子查询,可以很容易地解决此问题。它显示了一个错误,即不能在group by子句的group by列表中使用聚合或子查询。@pranhat
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)