2016-11-10 6 views
0

を取得するために参加し、この私のクエリの一部考えてみましょう:Oracleは、最大データと非グループ化されたコラム

SELECT field1, field2, field3, ... 

LEFT JOIN (
    SELECT field1, field2, MAX(field3) field3 
    FROM table 
    WHERE field2 IN ('1','2','3','4') 
    AND field4 > SYSDATE - 365 
    GROUP BY field1, field2) jointable ON other.fk= jointable.field1 

のでfield4は日付です。私はtableからの日付が必要です。それを選択リストに追加すると、それをグループに追加する必要があります。そのため、グループ化してMAX(field3)を引き出すことはできません。

tableをプライマリキーに再び参加させることはできますが、それは理想的ではありません。これを達成する方法はありますか?

+0

:最高field3最新field4日付にされていないいくつかの単純なデータのためのCTEを持つだけで、サブクエリのuickデモ、集約が起こっているときあなたの唯一のオプションは、 'field4'の集約(例えば、min、max)を選択するか、またはそれを' GROUP BY'リストに追加することです。 –

答えて

1

に依存することになるようです

SELECT field1, field2, field3, ... 

LEFT JOIN (
    SELECT field1, field2, MAX(field3) field3, 
     MAX(field4) KEEP (DENSE_RANK LAST ORDER BY field3) field4 
    FROM table 
    WHERE field2 IN ('1','2','3','4') 
    AND field4 > SYSDATE - 365 
    GROUP BY field1, field2) jointable ON other.fk= jointable.field1 

Q:各field1/2組み合わせに対して最大field3値に関連付けられた日付を取得するためにthe aggregate keep dense_rank sytnaxを使用これは、サブクエリから `field4`を選択するので話すようにあまり意味がありません

with your_table (field1, field2, field3, field4) as (
    select 'A', '1', 1, date '2016-11-01' from dual 
    union all select 'A', '1', 2, date '2016-09-30' from dual 
) 
SELECT field1, field2, MAX(field3) field3, 
    MAX(field4) KEEP (DENSE_RANK LAST ORDER BY field3) field4 
FROM your_table 
WHERE field2 IN ('1','2','3','4') 
AND field4 > SYSDATE - 365 
GROUP BY field1, field2 
/

F F  FIELD3 FIELD4  
- - ---------- ---------- 
A 1   2 2016-09-30 
+0

私はそれが何であるか分かりませんが、それはすばらしく働いていました。私は良い方法があることを知っていた。ありがとう。 – Leeish

0

できた窓関数は、ここでうまく動作しますように...

SELECT field1, field2, field3, ... 

LEFT JOIN (
    SELECT field1, field2, MAX(field3) over (partition by field1, field2) field3, Field4 
    FROM table 
    WHERE field2 IN ('1','2','3','4') 
    AND field4 > SYSDATE - 365 
    GROUP BY field1, field2, field4) jointable ON other.fk= jointable.field1 

フィールド3のマックスは今、フィールド4の独立したことが、まだあなたフィールド1と2

関連する問題