Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Последняя запись


Автор: KAV2008 5.4.2011, 13:47
Есть таблица Table с полями Id (участок) и ves (вес) и revision (дата)
id     ves          revision
-------------------------------
1        10       01.01.2011
1        15       15.01.2011
2        17       22.01.2011
2        33       23.01.2011
3        48       01.01.2011
3        11       17.01.2011
3        47       05.02.2011
*****
12       15       01.01.2011


Необходимо выбрать по каждому участку (ID) последнюю по времени запись
Результат;
id     ves          revision
-------------------------------
1        15       15.01.2011
2        33       23.01.2011
3        47       05.02.2011
12       15       01.01.2011

БД oracle (не используя limit и top)

Подскажите пожалуйста как справиться с этим запросом

Автор: Zloxa 5.4.2011, 13:52
Цитата(KAV2008 @  5.4.2011,  13:47 Найти цитируемый пост)
Необходимо выбрать по каждому участку (ID) последнюю по времени запись

Код

select id
  , max(ves) keep (dense_rank last order by revision) ves
  , max(revision) revision
from table
group by id

Код

select id,ves,revision
from (
  select t.*
    , row_number() /*dense_rank()*/ over (partition by id order by revision desc ) rn
  from table t
)
where rn =1;


Автор: KAV2008 6.4.2011, 05:25
Спасибо Все получилось!

Автор: KAV2008 6.4.2011, 09:27
Подскажите пожалуйста  с запросом 
Задач та же + по каждому участку id есть подучастки  со своим весом на определенную дату
Вес по каждому подучастку будет введен на определенной число
 как выбрать последнюю запись для каждой группы подучасков каждого участка
id     id_y     ves          revision
-------------------------------
1      1            10       11.01.2011
1      2            15       11.01.2011
1      1           17        15.02.2011
1      2           22        15.02.2011
2      4           13        15.01.2011
2      3           46        15.01.2011
2      4           13        27.03.2011
2      3           46        27.03.2011
***

Результат;
id     id_y     ves          revision
-------------------------------
1      1           17        15.02.2011
1      2           22        15.02.2011
2      4           13        27.03.2011
2      3           46        27.03.2011
Спасибо 

Автор: Zloxa 6.4.2011, 09:31
Цитата(KAV2008 @  6.4.2011,  09:27 Найти цитируемый пост)
Задач та же + по каждому участку id есть подучастки  со своим весом на определенную дату

Добавить id участка в группировку или же в критериий секционирования аналитической функции. 

Автор: KAV2008 6.4.2011, 09:42

Код

select id,ves,revision, id_y
from (
  select t.*
    , row_number() /*dense_rank()*/ over (partition by id, id_y order by revision desc ) rn
  from table t
)
where rn =1;


Автор: KAV2008 6.4.2011, 10:33
Спасибо за помощь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)