Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как получить последние уникальные записи по 2 столбцам? / 6 сообщений из 6, страница 1 из 1
15.06.2018, 11:07
    #39661154
manking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить последние уникальные записи по 2 столбцам?
Вот есть такая таблица:

Код: plaintext
1.
2.
3.
4.
5.
id      page data time 
30005    1    а    13304214124
30005    2    а    13304214124
30006    3         13304214124
30005    1    b    14304214124
30005    2    b    14304214124

Мы знаем id и массив page. Нужно для каждого id и page достать data, но только уникальные последние по столбцу time.

То есть зная что id=30005 и page=1 и 2. Нужно получить эти записи где data равна b
...
Рейтинг: 0 / 0
15.06.2018, 12:57
    #39661234
ln123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить последние уникальные записи по 2 столбцам?
Наверное как то так:
Код: sql
1.
2.
3.
select * from 
(select t.*, rank() over(order by t.time desc) r from t where id = 30005  and page in (1,2)) t
where t.r = 1
...
Рейтинг: 0 / 0
15.06.2018, 14:25
    #39661290
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить последние уникальные записи по 2 столбцам?
manking,

lateral + order by + limit 2
or 2*lateral + order by + limit 1
...
Рейтинг: 0 / 0
15.06.2018, 17:34
    #39661410
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить последние уникальные записи по 2 столбцам?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with t1(id, page, data, time)
as (
    values (30005, 1, 'а', 13304214124)
    , (30005, 2, 'а', 13304214124)
    , (30006, 3, '', 13304214124)
    , (30005, 1, 'b', 14304214124)
    , (30005, 2, 'b', 14304214124)
)
select distinct on (id, page) * 
from t1 
where id=30005 and page in (1, 2)
order by id, page, time desc;
...
Рейтинг: 0 / 0
15.06.2018, 17:45
    #39661414
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить последние уникальные записи по 2 столбцам?
qwwqmanking,

lateral + order by + limit 2
or 2*lateral + order by + limit 1

Может, достаточно DISTINCT ON () ?
...
Рейтинг: 0 / 0
18.06.2018, 00:30
    #39661759
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить последние уникальные записи по 2 столбцам?
ursidoqwwqmanking,

lateral + order by + limit 2
or 2*lateral + order by + limit 1

Может, достаточно DISTINCT ON () ?
кхм.
эта приятная фича синтакса не поддержана надлежащими алгоритмами (всё то же что и про луз скан, собсно)

т.ч. с т.з. множеств достаточно. а с практической т.з. -- статистика пгагента пользуется таким запросом, для получения последнего состояния. не обеспечив очистки логов -- ждёте по полчаса. тоже какие-то колхозники писали. и ведь индексом снаружи не запинаешь.

а написали бы педры простой коррелят (лейтералов тогда не было) -- и все бы пиналось одним индексом
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как получить последние уникальные записи по 2 столбцам? / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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