我在桌子下方 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'
答案 0 :(得分: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
值。