1

このクエリの助けが必要です。コードごとに最新の日付でコード名アドレスを取得する必要があります (この例では、date1 は < date6 です)

タブ1

   code address
====================
    cod1    addr1
    cod2    addr2
    cod3    addr3
    cod4    addr4

タブ 2

    code    date     name
===========================
    cod1    date1    name1
    cod1    date2    name1
    cod1    date3    name2
    cod2    date3    name3
    cod3    date5    name4
    cod3    date6    name5
    cod4    date3    name6

だから私は書く

SELECT Tab1.code, Tab1.address, Tab2.name, max(Tab2.date)
FROM Tab1, Tab2
WHERE Tab1.code=Tab2.code
GROUP BY
Tab1.code, Tab1.address, Tab2.name
ORDER BY
Tab2.name

しかし、私が望むものは得られません。同じコードを異なる日付で複数回使用しているため、結合またはネストされた選択が必要だと思いますが、少し無知なので、ここで助けを求めています

4

1 に答える 1

1

分析関数または集計関数のいずれかを使用できます。

分析:

SELECT code, address, name, date
  FROM (SELECT Tab1.code, Tab1.address, Tab2.name, Tab2.date,
               row_number() OVER (PARTITION by tab1.code 
                                  ORDER BY tab2.date DESC) rn
          FROM Tab1 
          JOIN Tab2 ON tab1.code = tab2.code)
 WHERE rn = 1

集合体:

SELECT Tab1.code, Tab1.address, 
       MAX(Tab2.name) KEEP (DENSE_RANK FIRST ORDER BY tab2.date DESC) name,
       MAX(tab2.date) KEEP (DENSE_RANK FIRST ORDER BY tab2.date DESC) date
  FROM Tab1 
  JOIN Tab2 ON tab1.code = tab2.code
 GROUP BY Tab1.code, Tab1.address

これにより、テーブル 1 の各行に対して 1 つの行が選択されます。テーブル 2 に同じコードの同じ日付の行が 2 つある場合、1 つの行のみが任意に選択されます。

于 2013-05-14T14:07:18.620 に答える