powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите составить запрос: выбрать "последнюю запись" для каждого объекта
4 сообщений из 4, страница 1 из 1
Помогите составить запрос: выбрать "последнюю запись" для каждого объекта
    #37191865
blzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sybase ASE.

Есть табличка
Код: plaintext
1.
2.
3.
4.
5.
6.
create table report(
name varchar( 30 )
start datetime,
finish  datetime null,
property1 int null,
property2 int null
)

в неё заносится время старта и завершения некоего процесса name, и его свойства на тот момент.
Естественно name периодически повторяется, но с другим временем старта и завершения.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
insert into report values (name,start,finish, property1, property2)
values ("alfa","Feb 17 2011 4:24PM", "Feb 17 2011 4:25PM", 1 , 1 )
values ("beta","Feb 17 2011 4:25PM", "Feb 17 2011 4:26PM", 1 , 3 )
values ("gamma","Feb 17 2011 4:25PM", "Feb 17 2011 4:28PM", 2 , 2 )

values ("alfa","Feb 18 2011 3:01AM", "Feb 18 2011 3:10AM", 1 , 8 )
values ("beta","Feb 18 2011 3:11AM", "Feb 18 2011 3:25AM", 1 , 7 )
values ("gamma","Feb 18 2011 3:25AM", "Feb 18 2011 3:26AM", 6 , 2 )
values ("delta","Feb 18 2011 3:25AM", "Feb 18 2011 3:26AM", 5 , 2 )

values ("alfa","Feb 19 2011 3:02AM", "Feb 19 2011 3:11AM", 4 , 2 )
values ("beta","Feb 19 2011 3:12AM", "Feb 19 2011 3:26AM", 3 , 2 )
values ("gamma","Feb 19 2011 3:26AM", "Feb 19 2011 3:40AM", 2 , 2 )
Нужно составить запрос, который для каждой name вернет запись для за последную дату finish.
т.е. вернет


namestartfinish property1 property2"delta""Feb 18 2011 3:25AM" "Feb 18 2011 3:26AM"52"alfa""Feb 19 2011 3:02AM" "Feb 19 2011 3:11AM"42"beta""Feb 19 2011 3:12AM" "Feb 19 2011 3:26AM"32"gamma""Feb 19 2011 3:26AM" "Feb 19 2011 3:40AM"22
...
Рейтинг: 0 / 0
Помогите составить запрос: выбрать "последнюю запись" для каждого объекта
    #37192113
invariant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blzzНужно составить запрос, который для каждой name вернет запись для за последную дату finish.


Код: plaintext
1.
select name,start,finish,property1,property2 from report group by name having finish=max(finish) 
...
Рейтинг: 0 / 0
Помогите составить запрос: выбрать "последнюю запись" для каждого объекта
    #37192141
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
закинуть во времянку или использовать как подзапрос результаты запроса
create table #t(
name varchar(30)
max_finish datetime null
)

insert into #t (name, max_finish)
select name, max(finish) from report group by name;

итоговая выборка строится как объединение c этим фильтром
select r.*
from report r join #t t on (r.name=t.name)
where r.finish=t.max_finish

Простой, но дубовый вариант, мне не нравится, просто в записи коротко.
select r.* from report r
where r.finish=(select max(r2.finish) from report r2 where r2.name=r.name)
...
Рейтинг: 0 / 0
Помогите составить запрос: выбрать "последнюю запись" для каждого объекта
    #37192301
blzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invariant
Код: plaintext
1.
select name,start,finish,property1,property2 from report group by name having finish=max(finish) 

Спасибо. делает то то надо.
Про having слышал но не понимал как им пользоваться, в where max() не засунешь.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите составить запрос: выбрать "последнюю запись" для каждого объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]