如何按组排列序列范围

时间:2014-02-14 12:30:39

标签: sql group-by sequence

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

----------

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

提前致谢....

1 个答案:

答案 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)

SQLFiddle demo

此查询必须适用于任何数据库系统,但是当您发布问题时,请使用您的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)

SQLFiddle demo

相关问题