Distinct по одному полю таблицы из нескольких столбцов

Имеем следующий тестовый запрос:

SELECT o.ENTRY_ID, o.DESCRIPT, 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)

который возвращает следующий набор данных:

ENTRY_ID  DESCRIPT        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

Таким образом если результирующие записи связаны с одной компании мы увидим несколько записей с одинаковым DESCRIPTION. Цель: получить только одну запись, связанную с каждой компанией.

То есть планируем получить получить следующий набор данных:

ENTRY_ID  DESCRIPT        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

Решение:

SELECT ENTRY_ID, DESCRIPT, ENTRY_DATE, COMPANY_ID
  FROM (SELECT o.ENTRY_ID,
               o.DESCRIPT,
               o.ENTRY_DATE,
               l.COMPANY_ID,
               ROW_NUMBER() OVER(PARTITION BY o.descript ORDER BY o.entry_date DESC, o.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;

Этот запрос вернет одно уникальное значение поля DESCRIPTION соответственно с бОльшей ENTRY_DATE или бОльшей ENTRY_ID (если несколько записей с одинаковыми ENTRY_DATE).

Источник:  http://stackoverflow.com/questions/543311/for-oracle-sql-getting-a-distinct-value-across-multiple-tables-and-columns

Оставить комментарий