如何根据出现的顺序对SQL查询中的数据进行分组

时间:2016-09-26 08:42:52

标签: mysql sql

请参阅下表,您可以看到日期,分配和phs

Ops Day Date       St.Time  End TimeCls Phs   
A   1   13.11.2015  4:45    6:30    PP  RXXX    
A   1   13.11.2015  6:30    12:00   PP  RXXX    
A   1   13.11.2015  12:00   18:00   PP  RXXX    
A   3   15.11.2015  1:00    3:00    CN  RXXX    
A   3   15.11.2015  3:00    8:00    CN  RXXX    
A   3   15.11.2015  8:00    10:30   PP  RXXX    
A   3   15.11.2015  10:30   12:00   PP  RXXX    
A   4   16.11.2015  15:30   16:00   PP  CXXX    
A   4   16.11.2015  16:00   18:30   PP  CXXX    
A   4   16.11.2015  23:30   23:59   PN  CXXX    
A   5   17.11.2015  0:00    0:15    PN  CXXX    
A   5   17.11.2015  0:15    0:45    PP  CXXX    
A   5   17.11.2015  0:45    1:15    PP  CXXX    
A   5   17.11.2015  1:15    1:30    PP  CXXX    
A   5   17.11.2015  1:30    2:00    PP  CXXX    

现在我想让查询的输出像这样

  1. RXXX - Cls PP
  2. RXXX - Cls CN
  3. RXXX - Cls PP
  4. CXXX - Cls PP
  5. CXXX - Cls PN
  6. CXXX - Cls PP
  7. 这意味着如果Phs,Cls在运行日期内是相同的,那么它应该被分组成一个序列。如果Phs有不同的Cls,那么另一个序列。或者即使Phs和Cls与之前的相同,但它来自不同的Cls或Phs。它应该分组到下一个序列。

    日期基本上应该构成序列,但是当phs和cls或者phs和cls都不同时,它会创建另一个序列

    分组后的预期结果

    Ops Day Date    Strt Time   End timeCls Phs   Seq
    A   1   13.11.2015  4:45    6:30    PP  RXXX    1
    A   3   15.11.2015  1:00    3:00    CN  RXXX    2
    A   3   15.11.2015  8:00    10:30   PP  RXXX    3
    A   4   16.11.2015  15:30   16:00   PP  CXXX    4
    A   4   16.11.2015  23:30   23:59   PN  CXXX    5
    A   5   17.11.2015  0:15    0:45    PP  CXXX    6
    

1 个答案:

答案 0 :(得分:0)

试试这个

SELECT 
    *, @Seq:=@Seq + 1 AS `Seq`
FROM
    (SELECT 
        `Ops`, `Day`, `Date`, `Start`, `End`, `Phs`
    FROM
        `yourtable`
    GROUP BY `Day` , `Date` , `Cls` , `Phs`) tblresults,
    (SELECT @Seq:=0) tblSeq;