0

2 つのテーブルがあり、次のクエリを作成します。

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 が datetime フィールドであることです。同じ table2.id の 2 つ以上のレコードを同じ日 (たとえば 01/28) に持つことができ、各 ID の 1 つのレコードを取得したいだけです。

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()これを行う標準的な方法は、サブクエリを使用して 1 つの行を選択することです。

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 に答える