Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何按组排列序列范围_Sql_Group By_Sequence - Fatal编程技术网

Sql 如何按组排列序列范围

Sql 如何按组排列序列范围,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

大家好 我面临一个问题,需要一个问题, 我有一个表格和数据,比如

现在我要求输出如下

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
提前谢谢

尝试此查询主要思想是按不等于当前标记的上一个标记的计数分组

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)