Как вывести только максимальное значение - MySQL

Узнай цену своей работы

Формулировка задачи:

На картинке есть дизайн запроса Сам запрос кодом выглядит так
SELECT
  zakaz.idzakaz,
  SUM(stroka_zakaza.kol * price.price) AS summa,
  history_status.datatime,
  sotrudnik.familiya,
  sotrudnik.imy,
  sotrudnik.otchestvo,
  status_zakaz.name,
  history_status_1.idstatus
FROM zakaz
  LEFT OUTER JOIN stroka_zakaza
    ON zakaz.idzakaz = stroka_zakaza.idzakaz
  LEFT OUTER JOIN price
    ON stroka_zakaza.idprice = price.idprice
  LEFT OUTER JOIN history_status
    ON zakaz.idzakaz = history_status.idzakaz
  LEFT OUTER JOIN sotrudnik
    ON history_status.idsotr = sotrudnik.idsotrudnik
  LEFT OUTER JOIN history_status history_status_1
    ON zakaz.idzakaz = history_status_1.idzakaz
  LEFT OUTER JOIN status_zakaz
    ON history_status_1.idstatus = status_zakaz.idstatus_zakaz
WHERE zakaz.idklient = 21 AND history_status.idstatus = 1
GROUP BY zakaz.idzakaz,
         history_status_1.idstatus
ORDER BY zakaz.idzakaz
Надо сделать так чтоб показал только один idstatus самый максимальный к примеру для заказа 5577 Это 7 а для заказа 12780 это 6 То есть по каждому заказу только одну строчку с максимальным статусом заказа (То есть с последним присвоенным)

Решение задачи: «Как вывести только максимальное значение»

textual
Листинг программы
SELECT
  zakaz.idzakaz,
  SUM(stroka_zakaza.kol * price.price) AS summa,
  history_status.datatime,
  sotrudnik.familiya,
  sotrudnik.imy,
  sotrudnik.otchestvo,
  (SELECT
  status_zakaz.name
FROM history_status
  INNER JOIN status_zakaz
    ON history_status.idstatus = status_zakaz.idstatus_zakaz
WHERE history_status.idzakaz = zakaz.idzakaz
ORDER BY history_status.id DESC
LIMIT 1) AS expr1
FROM status_zakaz,
     zakaz
       LEFT OUTER JOIN stroka_zakaza
         ON zakaz.idzakaz = stroka_zakaza.idzakaz
       LEFT OUTER JOIN price
         ON stroka_zakaza.idprice = price.idprice
       LEFT OUTER JOIN history_status
         ON zakaz.idzakaz = history_status.idzakaz
       LEFT OUTER JOIN sotrudnik
         ON history_status.idsotr = sotrudnik.idsotrudnik
WHERE zakaz.idklient = 21 AND history_status.idstatus = 1
GROUP BY zakaz.idzakaz
ORDER BY zakaz.idzakaz

Объяснение кода листинга программы

Представленный SQL-код выполняет следующую задачу: он выбирает заказы клиента с ID 21, для которых статус заказа равен 1, и вычисляет их общую сумму. Код также выводит информацию о сотруднике, который сделал заказ, и дату и время изменения статуса заказа. Вот список действий, которые выполняет код:

  1. Выборка данных из таблицы zakaz и соответствующих таблиц stroka_zakaza, price, history_status и sotrudnik.
  2. Вычисление общей суммы каждого заказа с помощью функции SUM().
  3. Выборка имени статуса заказа из таблицы status_zakaz.
  4. Сортировка результатов по ID заказа в порядке убывания.
  5. Ограничение результатов до одного заказа с помощью оператора LIMIT.
  6. Группировка результатов по ID заказа.
  7. Сортировка результатов по ID заказа. Пожалуйста, обратите внимание, что список действий может быть неполным, и для полного понимания кода рекомендуется изучить его в контексте соответствующей базы данных и ее структуры.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

7   голосов , оценка 4.714 из 5
Похожие ответы