Как построить запрос что бы получить срез последних цен по группам - MySQL
Формулировка задачи:
Имеется 3 таблицы
1 Товары
id ключ
name наименование
2 Склады
id ключ
name наименование
3 Цены
id ключ
idsklad ключ к складу
idtovar ключ к товару
datereg дата регистрации цены
val цена
Не могу составить запрос что бы для определенного товара выводились все склады с последней зарегистрированной ценой. То есть соотношение товар (один ко многим) склады, склады (один ко одному) цена. Сделал вот это дата верная но цена вообще левая:
SELECT skladi.name, ceni.val, MAX(ceni.datereg) FROM ceni JOIN skladi ON ceni.idsklad=skladi.id WHERE ceni.idtovar='$id' GROUP BY skladi.id ORDER BY ceni.val
Решение задачи: «Как построить запрос что бы получить срез последних цен по группам»
textual
Листинг программы
select s.id,name,datereg, cena, tovar from ( select max(p1.datereg) maxdatereg from ceni p1 group by p1.sklad ) zz join ceni c on zz.maxdatereg=c.datereg join skladi s on s.id=c.sklad WHERE tovar=$id
Объяснение кода листинга программы
Код написан на SQL и выполняет следующую задачу: получение среза последних цен по группам.
select s.id,name,datereg, cena, tovar from (
— начало запроса.select max(p1.datereg) maxdatereg
— это подзапрос, который выбирает максимальную дату регистрации для каждой группы.from ceni p1
— указывается таблица, из которой выбираются данные.group by p1.sklad
— группировка по полюsklad
.join ceni c on zz.maxdatereg=c.datereg
— объединение таблицыceni
по полюdatereg
с результатом подзапроса.join skladi s on s.id=c.sklad
— объединение таблицыskladi
по полюid
с таблицейceni
.WHERE tovar=$id
— задается условие, что результат будет только для товара с указанным ID.)
— конец запроса.