基于列删除SQL中的重复项

基于列删除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

我正在尝试从数据库中删除孤立行。假设我有这个表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    | 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
                      );