我有一张看起来像这样的表:
如您所见,有一些日期重复,那么如何为该表中的每个日期只选择一行?
列'id_from_other_table'来自INNER JOIN,上面有表
答案 0 :(得分:10)
有多个行具有相同的日期,但时间不同。因此,DISTINCT start_date将不起作用。你需要的是:将start_date强制转换为DATE(因此TIME部分消失了),然后执行DISTINCT:
SELECT DISTINCT CAST(start_date AS DATE) FROM table;
根据您使用的数据库,DATE的类型名称不同。
答案 1 :(得分:7)
除日期外,您还需要其他任何信息吗?如果不是:
SELECT DISTINCT start_date FROM table;
答案 2 :(得分:4)
你提到有重复日期,但看起来它们在秒的精确度下是非常独特的。
您能否澄清一下考虑日期重复的日期精确度 - 日,小时,分钟?
无论如何,你可能想要floor your datetime field。删除重复项时,您没有指出首选哪个字段,因此此查询将按字母顺序首选姓氏。
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')
答案 3 :(得分:2)
Select Distinct CAST(FLOOR( CAST(start_date AS FLOAT ) )AS DATETIME) from Table
答案 4 :(得分:1)
如果要在特定日期选择任意随机单行,则
SELECT * FROM table_name GROUP BY DAY(start_date)
如果您想为每个用户每天选择一个条目,那么
SELECT * FROM table_name GROUP BY DAY(start_date),owner_name
答案 5 :(得分:1)
这里是您的查询的解决方案,只返回该表中每个日期的一行 这里的解决方案'tony'将出现两次,因为它有两个不同的开始日期
SELECT * FROM
(
SELECT T1.*, ROW_NUMBER() OVER(PARTITION BY TRUNC(START_DATE),OWNER_NAME ORDER BY 1,2 DESC ) RNM
FROM TABLE T1
)
WHERE RNM=1
答案 6 :(得分:0)
你必须转换" DateTime"到"日期"。然后,无论该日期的时间如何,您都可以更轻松地选择给定日期中的一个。