SQL如何删除select查询中的重复项?

Ton*_*ony 12 sql

我有一张看起来像这样的表:

替代文字

如您所见,有一些日期重复,那么如何为该表中的每个日期只选择一行?

'id_from_other_table'列来自INNER JOIN和上表

Tho*_*ler 10

有多个行具有相同的日期,但时间不同.因此,DISTINCT start_date将不起作用.你需要的是:将start_date强制转换为DATE(因此TIME部分已经消失),然后执行DISTINCT:

SELECT DISTINCT CAST(start_date AS DATE) FROM table;
Run Code Online (Sandbox Code Playgroud)

根据您使用的数据库,DATE的类型名称不同.


amo*_*fis 7

除日期外,您还需要其他任何信息吗?如果不:

SELECT DISTINCT start_date FROM table;
Run Code Online (Sandbox Code Playgroud)

  • 日期是一样的,但时间不同; 因此,如果没有格式化,``DISTINCT`将无法在`start_date`上运行 (2认同)

p.c*_*ell 5

你提到有日期重复,但看起来它们在秒的精度上非常独特。

您能否澄清您开始考虑重复日期的日期精度 - 天,小时,分钟?

在任何情况下,您可能都希望将datetime 字段设置地板。在删除重复项时,您没有指明首选哪个字段,因此此查询将优先按字母顺序显示姓氏。

 SELECT MAX(owner_name), 
        --floored to the second
        dateadd(second,datediff(second,'2000-01-01',start_date),'2000-01-01') AS StartDate
 From   MyTable
 GROUP BY dateadd(second,datediff(second,'2000-01-01',start_date),'2000-01-01')
Run Code Online (Sandbox Code Playgroud)