Оракул
Оракул
(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 года назад
Вроде понял принцип, попробую. Мне не прайсы максимальные определять нужно, а максимальное время в рамках нужного времени и тянуть прайс уже вторым запросом.
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
Как мне объединить их в рабочий запрос?