0

次のサンプルクエリがあります。

select o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE, l.COMPANY_ID 
from TABLE1 o, TABLE2 l 
where o.ENTRY_ID = l.ENTRY_ID 
and COMPANY_ID in (10, 11, 12, 13)

次のような一連のデータが返されます。

ENTRY_ID, DESCRIPTION, ENTRY_DATE, COMPANY_ID
1, Description 1, 2/12/2008, 10
2, Description 2, 2/12/2008, 10
3, Description 3, 2/10/2008, 10
4, Description 4, 2/11/2008, 10
4, Description 4, 2/11/2008, 11
4, Description 4, 2/11/2008, 12
4, Description 4, 2/11/2008, 13

エントリが複数の会社に関連付けられている場合、このクエリは、関連付けられている会社ごとに同じエントリを 1 回返します。

クエリを COMPANY_ID で区別して、エントリが複数の会社に関連付けられている場合に 1 回だけ返されるようにしたいと考えています。

返してほしい結果セットは次のとおりです。

ENTRY_ID, DESCRIPTION, ENTRY_DATE, COMPANY_ID
    1, Description 1, 2/12/2008, 10
    2, Description 2, 2/12/2008, 10
    3, Description 3, 2/10/2008, 10
    4, Description 4, 2/11/2008, 10

ただし、次の場合も同様に許容されます。

ENTRY_ID, DESCRIPTION, ENTRY_DATE, COMPANY_ID
    1, Description 1, 2/12/2008, 10
    2, Description 2, 2/12/2008, 10
    3, Description 3, 2/10/2008, 10
    4, Description 4, 2/11/2008, 11

個別の ENTRY_ID が必要です。現在取得している結果セットでは、ENTRY_ID を持つ 4 つのエントリを取得しています。これは、4 つの異なる企業がそのエントリを共有しているためです。エントリーを複数の会社で共有する場合、エントリーを 1 つだけ返してほしい。

4

3 に答える 3

2
SELECT ENTRY_ID, DESCRIPTION, ENTRY_DATE, COMPANY_ID
FROM (
  SELECT o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE, l.COMPANY_ID,
         ROW_NUMBER() OVER (PARTITION BY company_id ORDER BY entry_date DESC, entry_id DESC) AS rn
  FROM TABLE1 o, TABLE2 l 
  WHERE o.ENTRY_ID = l.ENTRY_ID 
    AND COMPANY_ID in (10, 11, 12, 13)
  )
WHERE rn = 1

これは、最後に等しいエントリが複数ある場合、最後ENTRY_DATEまたはそれ以上のエントリを返します。ENTRY_IDENTRY_DATE

于 2009-02-12T21:27:50.413 に答える
0

COMPANY_ID最大のものを返してよければ:

select o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE, MAX( l.COMPANY_ID ) AS COMPANY_ID
from TABLE1 o, TABLE2 l 
where o.ENTRY_ID = l.ENTRY_ID 
and COMPANY_ID in (10, 11, 12, 13)
group by o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE;
于 2009-02-13T02:42:44.197 に答える
0

クエリを COMPANY_ID で区別して、エントリが複数の会社に関連付けられている場合に 1 回だけ返されるようにしたいと考えています。

質問は明確ではありません。個別のエントリまたは個別の会社が必要ですか。よりよく理解できるように、必要な出力を表示することもできます。

個別のエントリと company_id をリストする必要がある場合は、クエリは次のとおりです。

( から * を選択
select o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE, l.COMPANY_ID, row_number() over (o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE 順 l.COMPANY_ID 順) rn
TABLE1 o、TABLE2 lより
ここで o.ENTRY_ID = l.ENTRY_ID
(10, 11, 12, 13) の COMPANY_ID
)
ここで、rn=1;
于 2009-02-13T08:58:29.050 に答える