Сортировка и группировка - MySQL

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

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

Добрый день. Код привожу с сокращениями. Делаю запрос:
SELECT operitems.ORD ord, job.DATE job_date, job.ID job_id
FROM okb_db_operitems operitems
LEFT JOIN okb_db_job job ON operitems.ID = job.ID_operitems 
WHERE operitems.ID_zakmod=19582 
ORDER BY ord, job_date DESC
MySQL выдаёт что-то вроде:
ord   job_date  job_id
5     20160324  109869
5     20151209  109530
10    20160324  109531
10    20151223  109529
15    NULL      NULL
20    20160301  105075
20    20160229  105515
25    20160301  105076
25    20160229  105516
30    NULL      NULL
Необходимо сгруппировать вывод запроса по полю ord с одновременной сортировкой по полю job_date. Делаю так:
SELECT * FROM
(
SELECT operitems.ORD, job.DATE, job.ID
FROM okb_db_operitems operitems
LEFT JOIN okb_db_job job ON operitems.ID = job.ID_operitems 
WHERE operitems.ID_zakmod=19582 
ORDER BY ord, job_date DESC 
) tbl GROUP BY ord
Но на выходе получаю :
ord   job_date  job_id
5     20151209  87492 
10    20151223  90464
15    NULL      NULL
20    20160301  105075
25    20160301  105076
30    NULL      NULL
Т.е. вне зависимости от типа сортировки по полю job ( ASC/DESC ), при группировке по полю ord, в результирующий вывод запроса вставляется не самое большое значение, а какое-то предыдущее. Можно, разумеется, это разрулить последующей обработкой в PHP, но неужели нет нормального решения средствами SQL? Поискал в сети, вопрос не новый, но работающего решения я не нашёл. Выбрать по MAX(job) - не выход, в реальной базе ещё много нужных полей и нужна строка целиком. Работаю с MySQL.

Решение задачи: «Сортировка и группировка»

textual
Листинг программы
SELECT operitems.ORD, job.DATE
FROM okb_db_operitems.operitems
LEFT JOIN okb_db_job job ON operitems.ID = job.ID_operitems 
WHERE operitems.ID_zakmod=19582 
GROUP BY ord 
ORDER BY job_date

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

  1. SELECT operitems.ORD, job.DATE
  2. FROM okb_db_operitems.operitems
  3. LEFT JOIN okb_db_job job ON operitems.ID = job.ID_operitems
  4. WHERE operitems.ID_zakmod=19582
  5. GROUP BY ord
  6. ORDER BY job_date

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


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

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

7   голосов , оценка 3.714 из 5