基于列删除SQL中的重复项
我正在尝试从数据库中删除孤立行。假设我有这个表t:基于列删除SQL中的重复项,sql,sqlite,Sql,Sqlite,我正在尝试从数据库中删除孤立行。假设我有这个表t: session | name | record_date | uniqueid 1 | a | 2019-04-03 | 1x 2 | a | 2019-09-19 | 1x 3 | b | 2019-08-09 | zr 4 | c | 2019-09-19 | ww 5 | d | 2019-09-03 | yy 6 | d
session | name | record_date | uniqueid
1 | a | 2019-04-03 | 1x
2 | a | 2019-09-19 | 1x
3 | b | 2019-08-09 | zr
4 | c | 2019-09-19 | ww
5 | d | 2019-09-03 | yy
6 | d | 2019-09-25 | rr
7 | e | 2019-09-28 | dd
8 | e | 2019-04-19 |
我试图删除基于最早记录的重复条目,同时评估name和uniqueid以确保它们是实际的重复条目(而不是仅基于name的重复条目)。不仅仅是基于uniqueid进行计算的一个问题是,某些行在for uniqueid中具有空值。因此,在我的示例表中,我想删除第一行和最后一行。 我认为您正在查找<代码>最大()>代码>,不想考虑NULL UNIQUID,所以使用过滤器空值的位置。
name,max(record_date),uniqueid from table_name
where uniqueid is not null
group by name,uniqueid
您可以在下面尝试使用aggregration和
groupby
以及where子句过滤掉null uniqueid
select name,uniqueid,max(record_date)
from tablename
where uniqueid is not null
group by name,uniqueid
您可以使用
删除:
delete from t
where t.record_date < (select max(t2.record_date)
from t t2
where t2.name = t.name and
t2.uniqueid = t.uniqueid
);
会话8是否应该将dd
作为uniqueid
不,这就是问题所在。某些行的uniqueid值为null。您是要delete语句还是只需select?如果null uniqueid的日期是该名称的最大日期,该怎么办?
select t.*
from t
where t.record_date = (select max(t2.record_date)
from t t2
where t2.name = t.name and
t2.uniqueid = t.uniqueid
);