2017-02-06 8 views
0

Я хочу получать максимальное значение НомерСтарта для каждого идентификатораFetch максимального значения столбца из таблицы вместе с многими таблицами

с запросом образца:

SELECT a.id, a.seq, ... FROM TableA a, TableB b, ... 
WHERE a.id = b.id, ... 

id и seq является первичным ключом. TableB будет соединен с другой таблицей внешним ключом TableB. Без использования группы из-за того, что я присоединяюсь к нескольким таблицам со многими выделенными столбцами и большим количеством where_clause, поэтому мне нужно будет написать много групп по столбцам.

Другими словами, я хочу выбрать только строку с max(seq) для каждого уникального id.

Пожалуйста, сделайте сценарий работы с теоретически бесконечными столбцами, таблицами и where_clause. Желательно в базе данных Oracle.

ответ

0

Похоже, вам нужно использовать OVER() и PARTITION BY соответственно:

SELECT a.id, 
    MAX(seq) OVER (PARTITION BY a.id) 
FROM TableA a, TableB b 
WHERE a.id = b.id 
GROUP BY a.id 

В идеале, вы должны использовать явное соединение между вашими двумя таблицами:

SELECT a.id, 
    MAX(seq) OVER (PARTITION BY a.id) 
FROM TableA a 
    INNER JOIN TableB b on a.id = b.id 
GROUP BY a.id 
0

Вы можете использовать ROW_NUMBER для этого:

SELECT id, seq 
FROM (
SELECT a.id, a.seq, 
     ROW_NUMBER() OVER (PARTITION BY id ORDER BY seq DESC) AS rn 
FROM TableA a 
JOIN TableB b ON a.id = b.id) AS t 
WHERE t.rn = 1 

Если в c ase связей, вы хотите вернуть все записи с максимальным значением seq, а затем используйте RANK вместо ROW_NUMBER.

 Смежные вопросы

  • Нет связанных вопросов^_^