Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Базы данных

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 22.03.2011, 23:11   #1
Постоялец
 
Пол:Мужской
Регистрация: 02.07.2009
Сообщений: 393
Репутация: 79
По умолчанию Помогите с запросом

Запрос, по сути, элементарный, но я жестоко туплю...
Есть таблица из трёх полей:
id (pk), pid, timestamp
Комбинация pid+timestamp уникальна.

Что нужно: получить id кортежа с максимальным тайм-штампом для заданного пида. (сорь если косноязычно сформулировал).
При чём, кортеж должен возвращаться только один.
Варианты с join'ами, и top'ами не устраивают - максимум вложенный запрос.

Заранее спасибо.
__________________
Каждый человек, которому вы ответили на форуме "гугл в помощь" - потенциальный "возвращенец" в винды. (ц)
Alan2006 вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: Мебельный магазин: стол компьютерный 2000х800 - Переходи на сайт!Мебельный магазин: шкаф напольный узкий - Переходи на сайт!смесительный узел sumxk20-d-1,6(25-60) (kvs=1.6) (ск. 1)Мебельный магазин: узкий шкаф для обуви в прихожую - Переходи на сайт!клапан обратный ко-2 оцин. d630 0,9мм


Старый 05.04.2011, 21:25   #2
aixay
Новичок
 
Пол:Мужской
Регистрация: 05.01.2010
Сообщений: 19
Репутация: 2
По умолчанию Re: Помогите с запросом

Либо на самом деле язык сильно косноязычен, но кажется вот так:
select id from TABLE where pid=?Pid and TimeStamp = (select max(TimeStamp) from Table)
aixay вне форума
 
Ответить с цитированием Вверх
Старый 10.04.2011, 15:36   #3
sinet
Неактивный пользователь
 
Пол:Мужской
Регистрация: 25.04.2008
Сообщений: 34
Репутация: 15
По умолчанию Re: Помогите с запросом

хз надо попробовать, но возможно еще проще
select id, max(timestamp) from table where pid=1 group by id
sinet вне форума
 
Ответить с цитированием Вверх
Старый 12.04.2011, 16:52   #4
RAD_
Неактивный пользователь
 
Пол:Мужской
Регистрация: 13.11.2009
Сообщений: 2
Репутация: 1
По умолчанию Re: Помогите с запросом

как раз без ТОПа - нет гарантии что будет получен именно единственная запись,
если макс timestamp для pid - НЕ уникальный

но, навсякей, ишо вариантик

select id, timestamp
from table t1
where pid=1
and timestamp >= all (select timestamp from table t2 where t1.pid=t2.pid)
RAD_ вне форума
 
Ответить с цитированием Вверх
Старый 27.04.2011, 07:37   #5
xkilax
Новичок
 
Пол:Мужской
Регистрация: 27.12.2006
Сообщений: 14
Репутация: 9
По умолчанию Re: Помогите с запросом

Примерно так
select id from table where pid=1 order by timestamp desc rows 1 to 1
xkilax вне форума
 
Ответить с цитированием Вверх
Старый 26.05.2011, 10:36   #6
Alan2006
Постоялец
 
Пол:Мужской
Регистрация: 02.07.2009
Сообщений: 393
Репутация: 79
По умолчанию Re: Помогите с запросом

Цитата:
Сообщение от aixay Посмотреть сообщение
select id from TABLE where pid=?Pid and TimeStamp = (select max(TimeStamp) from Table)

В итоге получился такой же запрос, только во вложенном запросе добавил условие по pid. Всем спасибо.
__________________
Каждый человек, которому вы ответили на форуме "гугл в помощь" - потенциальный "возвращенец" в винды. (ц)
Alan2006 вне форума
 
Ответить с цитированием Вверх
Старый 18.10.2011, 12:12   #7
Frugurtita
Неактивный пользователь
 
Пол:Мужской
Регистрация: 05.02.2011
Сообщений: 10
Репутация: 0
По умолчанию Re: Помогите с запросом

если есть проблемы с сложным запросом то лучшее решение использовать временные таблицы и упростить запрос
Frugurtita вне форума
 
Ответить с цитированием Вверх
Старый 20.07.2012, 07:42   #8
igel9780
Новичок
 
Пол:Мужской
Регистрация: 16.02.2012
Сообщений: 8
Репутация: 0
По умолчанию Re: Помогите с запросом

Цитата:
Сообщение от Alan2006 Посмотреть сообщение
В итоге получился такой же запрос, только во вложенном запросе добавил условие по pid. Всем спасибо.

Вообще, это запрос тяжелый достаточно. Запрос с сортировкой гораздо проще.
В постгресе можно получить для нескольких значений одним запросом:
SELECT DISTINCT ON (Pid) Id, Pid, TimeStamp FROM TABLE WHERE Pid IN (?PidList) ORDER BY Pid, TimeStamp DESC

В MsSQL, для одного значения Pid точно можно получить одним запросом:
SELECT TOP 1 Id, Pid, TimeStamp FROM TABLE WHERE Pid = ?PidList ORDER BY TimeStamp DESC
igel9780 вне форума
 
Ответить с цитированием Вверх
Старый 04.05.2013, 23:05   #9
andresg
Новичок
 
Пол:Мужской
Регистрация: 04.04.2012
Сообщений: 16
Репутация: 1
По умолчанию Re: Помогите с запросом

Цитата:
Сообщение от Alan2006 Посмотреть сообщение
Запрос, по сути, элементарный, но я жестоко туплю...
Есть таблица из трёх полей:
id (pk), pid, timestamp
Комбинация pid+timestamp уникальна.

Что нужно: получить id кортежа с максимальным тайм-штампом для заданного пида. (сорь если косноязычно сформулировал).
При чём, кортеж должен возвращаться только один.
Варианты с join'ами, и top'ами не устраивают - максимум вложенный запрос.

Заранее спасибо.

m.pid=pid
sele max(timestamp) from таблица where pid=m.pid group by id
andresg вне форума
 
Ответить с цитированием Вверх
Старый 24.10.2014, 18:07   #10
VaalKIA
Новичок
 
Пол:Мужской
Регистрация: 24.10.2014
Сообщений: 6
Репутация: 0
По умолчанию Re: Помогите с запросом

Тут всё просто, используйте row_number

select
[id] = t.id
from
(
select
[id] = t.id,
[pid] = t.pid,
[timestamp] = t.timestamp,
[row] = row_number () over (partition by t.pid order by t.timestamp desc)
from
table t) as t
where
t.row = 1
and t.pid = value
VaalKIA вне форума
 
Ответить с цитированием Вверх
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 18:00. Часовой пояс GMT +3.


Copyright ©2004 - 2026 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.06410 секунды с 13 запросами