[英]how to delete first rows if i have pairs of almost identical rows
我有一个名为'SULP'的sqlite表,看起来像这样:
name year month day hour min ro
"SULP","12","7","7","0","0","2.41196" *
"SULP","12","7","7","0","0","2.39269"
"SULP","12","7","7","0","1","2.41117" *
"SULP","12","7","7","0","1","2.39198"
"SULP","12","7","7","0","2","2.41004" *
"SULP","12","7","7","0","2","2.39117"
"SULP","12","7","7","0","3","2.40914" *
"SULP","12","7","7","0","3","2.39043"
我不会删除标有*的行
我努力了
delete from SULP
where exists (select * from 'SULP' as t2 WHERE t2.year=year
AND t2.month=month AND t2.day=day AND t2.hour=hour AND
t2.min=min and ro<>t2.ro order by rowid desc limit 1);
和
delete from 'SULP'
where exists (select * from 'SULP' as t2 WHERE t2.year=year
AND t2.month=month AND t2.day=day AND t2.hour=hour AND
t2.min=min AND rowid<t2.rowid);
但没有运气:(
这将做你想要的:
DELETE FROM SULP
WHERE EXISTS (
SELECT *
FROM SULP t2
GROUP BY name, year, month, hour, min
HAVING SULP.rowid = min(t2.rowid)
)
请参见SQLFIDDLE
另一种方案:
DELETE FROM SULP WHERE (
SELECT MIN(ro) FROM SULP AS t2
WHERE year = SULP.year
AND month = SULP.month
AND day = SULP.day
AND hour = SULP.hour
AND min = SULP.min
) <> ro;
在子查询中, t2.year
和year
引用了t2
表的列。
您必须使用SULP.year
来引用外部表:
DELETE FROM "SULP"
WHERE EXISTS (SELECT 1
FROM "SULP" AS t2
WHERE t2.year = SULP.year
AND t2.month = SULP.month
AND t2.day = SULP.day
AND t2.hour = SULP.hour
AND t2.min = SULP.min
AND t2.ro < SULP.ro)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.