powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / select со сложным условием.
10 сообщений из 10, страница 1 из 1
select со сложным условием.
    #38721740
sksystem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Помогите плиз со сложным запросом к pgsql.

Есть одна таблица, в ней текстовое id объекта и время time типа integer.

Что бы мне достать последнее сообщение по объекту я делаю:
SELECT MAX(time) FROM table WHERE id = '1111';

Это хорошо работает. Но, у меня много объектов и для каждого из них делается запрос к базе, все это долго. Как мне сделать одним запросом все эти обращения.
Что-то вроде
SELECT MAX(time) FROM table WHERE id IN ('111','2222');

Вся сложность в том, что этот запрос мне вернет одно сообщение с максимальным временем из всех объектов. А мне надо что бы оно для 30 объектов вернуло для каждого из них по сообщению с максимальным временем именно для этого объекта. Что-то вроде
SELECT MAX(time[id]) FROM table WHERE id IN ('111','2222');

Может кто сталкивался с пободной задачей?
...
Рейтинг: 0 / 0
select со сложным условием.
    #38721741
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sksystem,
Код: plsql
1.
2.
3.
4.
SELECT id, MAX(time) 
  FROM table 
 WHERE id IN ('111','2222');
 GROUP BY id
...
Рейтинг: 0 / 0
select со сложным условием.
    #38721742
sksystem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,

То что надо, спасибо, в понедельник попробую)
...
Рейтинг: 0 / 0
select со сложным условием.
    #38722373
sksystem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал сегодня выполнить запрос, в принципе он выполняется тот который надо, но есть нюанс:
мне надо вытянуть не только эти два столбца, а ещё и все другие столбцйы в таблице. И вот тут ступор.
...
Рейтинг: 0 / 0
select со сложным условием.
    #38722388
sksystem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажись нашел: select * from storage0 where (unit_id, time) in (SELECT unit_id, max(time) from storage0 WHERE unit_id IN ('75726','81295') group by unit_id);
...
Рейтинг: 0 / 0
select со сложным условием.
    #38722428
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sksystemКажись нашел:нет, не нашли.
в запрос Павла Лазунова добавляете список всех необходимых полей и их же включаете в условие group by
но для начала почитайте это и это
ну и вообще ознакомиться с документацией не помешает
...
Рейтинг: 0 / 0
select со сложным условием.
    #38722456
sksystem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
roadster,

Вы имеете виду вот так:
SELECT unit_id, MAX(id), MAX(time) FROM storage0 WHERE unit_id IN ('75726','81295') GROUP BY unit_id,id;
?
Продобавал так, выдает все сообщения, а не по одному объекту с максимальным временем.

В моей варианте выдает верный мне результат. Если найдете минутку, буду признателен если более подробно разясните.

По документации я из неё не вылажу, смотрю постоянно, за линки благодарю.
...
Рейтинг: 0 / 0
select со сложным условием.
    #38722457
sksystem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой, ошибся не так:
SELECT unit_id, MAX(id), MAX(time) FROM storage0 WHERE unit_id IN ('75726','81295') GROUP BY unit_id,id;
а вот так
SELECT unit_id, id, MAX(time) FROM storage0 WHERE unit_id IN ('75726','81295') GROUP BY unit_id,id;
хотя пробовал и так и так

Сразу скажу что в MySQL Ваш вариант отрабатывает, а в PgSql почему-то нет.
...
Рейтинг: 0 / 0
select со сложным условием.
    #38722532
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это PostgreSQL, то удобно использовать расширение DISTINCT ON :
Код: sql
1.
2.
3.
4.
SELECT DISTINCT ON id,time
    id,time,name,col1,col2,col3
  FROM tab
 ORDER BY id, time DESC



Основное требование: колонки указанные в `DISTINCT ON` конструкции должны быть первыми в `ORDER BY`.
...
Рейтинг: 0 / 0
select со сложным условием.
    #38722673
--поправил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorovЕсли это PostgreSQL, то удобно использовать расширение DISTINCT ON :
Код: sql
1.
2.
3.
4.
SELECT DISTINCT ON (id,time)
    id,time,name,col1,col2,col3
  FROM tab
 ORDER BY id, time DESC



Основное требование: колонки указанные в `DISTINCT ON` конструкции должны быть первыми в `ORDER BY`.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / select со сложным условием.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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