2014-12-17 3 views
0

У меня есть следующие данные в базе данных, первичный ключ является полем SEQ, я хочу, чтобы выбрать данные, которые имеют максимальное seq:Получить максимальное количество Oracle SQL

ID  SEQ FILE 
1007 1  abc 
1007 2  def 

Следующий запрос является недействительным, но я хочу сделать то же самое, что и следующее.

SELECT * FROM table1 WHERE id = '1007' AND Max(seq) 
+0

мои ID в varchar2, и мой SEQ в ЧИСЛАХ – hades

+0

Почему вы хранящие номера в ' varchar' колонка? –

ответ

3
SELECT id, seq, file 
FROM ( 
    select id, seq, file, 
      max(seq) over (partition by id) as max_seq 
    from table1 
    WHERE id = '1007' 
) t 
where seq = max_seq; 
0

Если я понял правильно, вы хотите что-то вроде этого

select * 
from (select t.*, 
     max(t.seq) 
     keep (dense_rank first order by t.seq desc) 
     over (partition by t.id) max# 
from table1 t) 
where seq = max# 
0

Другого подхода:

select id,seq,"FILE" from 
(select t1.*,row_number() over (partition by id order by seq desc) cont_seq 
from your_table t1) 
where cont_seq = 1 
order by seq; 

Это даст вам все строки, сгруппированные по идентификатору, который имеет максимальный значение seq. Если вы хотите, чтобы конкретное значение просто добавить условие в выражении WHERE, как это:

select id,seq,"FILE" from 
(select t1.*,row_number() over (partition by id order by seq desc) cont_seq 
from your_table t1) 
where cont_seq = 1 and id = '1007' 
order by seq; 
0

select * from alber.table1;

MyId SEQ ИМЯ_ФАЙЛ


1007 2 а
1007 10 Защиту
1008 45 abc
1008 9 def

SELECT myid, seq, filename from alber.table1 mq where seq = (select max(seq) from alber.table1 sq where sq.myid = mq.myid);

MyId SEQ ИМЯ_ФАЙЛ


1007 10 Защита
1008 45 а

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