Для Oracle SQL - получение разных значений в нескольких таблицах и столбцах. - PullRequest
0 голосов
/ 13 февраля 2009

У меня есть следующий пример запроса,

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, поэтому, если запись связана с несколькими компаниями, она возвращается только один раз.

Вот набор результатов, который я хочу вернуть:

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, потому что четыре разные компании разделяют эту запись. Я хочу, чтобы возвращалась только одна запись, когда она используется несколькими компаниями.

Ответы [ 3 ]

1 голос
/ 13 февраля 2009
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_ID, если будет более одной записи, равной последней ENTRY_DATE

0 голосов
/ 13 февраля 2009

Я бы хотел, чтобы запрос отличался от COMPANY_ID, поэтому, если запись связана с несколькими компаниями, она возвращается только один раз.

Вопрос не ясен, хотите ли вы отдельные записи или отдельные компании. Может быть, вы также можете показать результат, который вы хотите, чтобы мы могли лучше понять.

Если вы хотите, чтобы отдельные записи и company_id отображались в списке, это не имеет значения, вот запрос:

select * from (
select o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE, l.COMPANY_ID, row_number() over (partition by o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE order by l.COMPANY_ID) rn
from TABLE1 o, TABLE2 l 
where o.ENTRY_ID = l.ENTRY_ID 
and COMPANY_ID in (10, 11, 12, 13)
)
where rn=1;
0 голосов
/ 13 февраля 2009

Если вы счастливы получить наибольшее значение 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;
...