Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Сложный SQL запрос к одной таблице

форрегис Профи (787), на голосовании 3 года назад
Таблица:
id, name, time, price
Уникальный ключ: name+time, т. е. для каждой пары name+time в таблице одно значение price

Есть список имён name и время time (в примере текущее, но может быть и другим)
Нужно из таблицы получить одну цену price для каждого имени из списка имён name, у которых время меньше указанного, но при этом максимальное из найденных в таблице.

Мои наработки:
SELECT * FROM table
WHERE name IN (`name1`, `name2`, `name3`)
AND time < UNIX_TIMESTAMP()
GROUP BY name
ORDER BY time DESC

Как мне объединить их в рабочий запрос?
Голосование за лучший ответ
Оракул Оракул (62095) 3 года назад
Определяете вначале максимальные прайсы в рамках нужного времени, а затем прицепляете все остальные поля к отобранным максимальным

with name_max_price as (
select name, max(price) price from table
where time < :time
group by name)
select * from table t
join name_max_price nmp on t.name = nmp.name and t.price = nmp.price;
форрегисПрофи (787) 3 года назад
Вроде понял принцип, попробую. Мне не прайсы максимальные определять нужно, а максимальное время в рамках нужного времени и тянуть прайс уже вторым запросом.
Оракул Оракул (62095) форрегис, а, тогда max(price) поменяйте на max(time)
Похожие вопросы