Как построить запрос что бы получить срез последних цен по группам - 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 и выполняет следующую задачу: получение среза последних цен по группам.

  1. select s.id,name,datereg, cena, tovar from ( — начало запроса.
  2. select max(p1.datereg) maxdatereg — это подзапрос, который выбирает максимальную дату регистрации для каждой группы.
  3. from ceni p1 — указывается таблица, из которой выбираются данные.
  4. group by p1.sklad — группировка по полю sklad.
  5. join ceni c on zz.maxdatereg=c.datereg — объединение таблицы ceni по полю datereg с результатом подзапроса.
  6. join skladi s on s.id=c.sklad — объединение таблицы skladi по полю id с таблицей ceni.
  7. WHERE tovar=$id — задается условие, что результат будет только для товара с указанным ID.
  8. ) — конец запроса.

Оцени полезность:

10   голосов , оценка 4 из 5