0

我有两个表,我想做这个查询:

SELECT table1.name, table2.date 
FROM table1 
JOIN table2 ON table1.id=table2.id 
AND table2.date >= to_date('01/28/2013', 'mm/dd/yy HH24:mi:ss')

问题是 table2.date 是一个日期时间字段,您可以在同一天(假设是 01/28)有两条或多条相同 table2.id 的记录,我只想获取每个 id 的一条记录

我尝试使用 trunc 方法解决我的问题:

SELECT table1.name, TRUNC(table2.date)
FROM table1 
JOIN table2 ON table1.id=table2.id 
AND TRUNC(table2.date) >= to_date('01/28/2013', 'mm/dd/yy')

部分有效,重复的记录不再显示,但我的问题是我需要日期时间字段的时间部分

如何在不使用 TRUNC 的情况下避免重复记录?

4

2 回答 2

1

row_number()执行此操作的规范方法是使用和子查询选择一行:

SELECT table1.name, t2.date 
FROM table1 JOIN
     (select t.*, ROW_NUMBER() over (partition by id order by date) as seqnum
      from table2 t
     ) t2
     ON table1.id=table2.id and seqnum = 1
WHERE table2.date >= to_date('01/28/2013', 'mm/dd/yy HH24:mi:ss')

但是,您可以使用聚合做您想做的事情:

SELECT table1.name, min(table2.date)
FROM table1 
JOIN table2 ON table1.id=table2.id 
AND table2.date >= to_date('01/28/2013', 'mm/dd/yy HH24:mi:ss')
group by table1.name, trunc(table2.date)
于 2013-01-29T14:33:02.880 回答
0

为什么不从选择中删除 trunc 函数:

SELECT table1.name, table2.date
FROM table1 
JOIN table2 ON table1.id=table2.id 
AND TRUNC(table2.date) >= to_date('01/28/2013', 'mm/dd/yyyy')
于 2013-01-29T14:16:06.133 回答