2017-08-16 19 views
2

我有下面的表STORAGE_CAPACITY和我在一起。想連續排不同

CREATE TABLE STORAGE_CAPACITY(DATE_TIME DATETIME,COL1 INT,COL2 INT,COL3 INT,COL4 INT); 

INSERT INTO STORAGE_CAPACITY values(SYSDATE(),1,2,3,4); 
INSERT INTO STORAGE_CAPACITY values(SYSDATE(),1,2,3,4); 
INSERT INTO STORAGE_CAPACITY values(SYSDATE(),4,5,6,7); 
INSERT INTO STORAGE_CAPACITY values(SYSDATE(),4,5,8,9); 
INSERT INTO STORAGE_CAPACITY values(SYSDATE(),1,2,3,4); 

SELECT * FROM storage_capacity

現在我想的是,如果連續兩行具有相同的元素在col1中COL4的話,我只想要一個年長。

如果將來發生同樣的行,那麼我想要那一行。

所以我預計O/P

DATE_TIME, COL1, COL2, COL3, COL4 
'2017-08-16 16:37:02', '1', '2', '3', '4' 
'2017-08-16 16:37:18', '4', '5', '6', '7' 
'2017-08-16 16:37:26', '4', '5', '8', '9' 
'2017-08-16 16:37:57', '1', '2', '3', '4' 
+1

提供具有'sysdates'的數據集並不是很有幫助。 – Strawberry

+0

@Strawberry我在預期產出中提供了相同的數據。 –

+0

我很清楚所提供的內容,謝謝。 – Strawberry

回答

1

假設第一列定義的排序,你可以使用變量來此:

select t.* 
from (select t.*, 
      (@rn := if(@cols = concat_ws(',', col1, col2, col3, col4), @rn + 1, 
         if(@cols := concat_ws(',', col1, col2, col3, col4), 1, 1) 
         ) 
      ) as rn      
     from t cross join 
      (select @cols := '', @rn := 0) params 
     order by t.date_time 
    ) t 
where rn = 1; 

注意:要建立插入的順序,使用auto_increment列而不是datetime列更安全。表格中可以插入多行,具有相同的datetime值。

+0

特別感謝.. !! –