我有这个:
+----+---------------------+ | id | date | +----+---------------------+ | 1 | 2017-01-01 12:30:00 | | 2 | 2017-01-01 12:30:00 | | 3 | 2017-01-02 00:00:00 | | 4 | 2017-01-03 00:00:00 | +----+---------------------+
这是大型数据集的一部分(具有各种连接)。
我希望删除具有重复日期的条目,同时保留其中一个,即:。
+----+---------------------+ | id | date | +----+---------------------+ | 1 | 2017-01-01 12:30:00 | | 3 | 2017-01-02 00:00:00 | | 4 | 2017-01-03 00:00:00 | +----+---------------------+
有没有人知道这方面的好方法。我曾经想过排序然后迭代每一行并根据之前是否遇到过日期进行删除。或者在日期使用COUNT / HAVING。
感谢。
答案 0 :(得分:3)
您可以使用聚合:
select min(id) as id, date
from t
group by date;
如果你有其他专栏,那么这项工作就不会那么顺利。相反,请在where
子句中使用过滤器:
select t.*
from t
where t.id = (select min(t2.id) from t t2 where t2.date = t.date);
答案 1 :(得分:1)
您可以通过
简单地使用group by
函数来获得结果
SELECT * FROM table_name GROUP BY date;
但有些时候group by
在这种情况下无法正常工作see here
你应该使用
1)using min(id)
SELECT * FROM your_table GROUP BY date HAVING MIN(id);
2)using min(date)
SELECT * FROM your_table GROUP BY date HAVING MIN(date);