MySQL - GROUP BY, выберите только первую строку при группировке - PullRequest
0 голосов
/ 30 января 2019

У меня проблема с группировкой определенных столбцов в один.Когда я использую GROUP BY, всегда выбирается последняя строка, когда она должна быть первой.

Основной запрос:

SELECT cpme_id, 
       medicine_main_tbl.med_id, 
       Concat(med_name, ' (', med_dosage, ') ', med_type) AS Medicine, 
       med_purpose, 
       med_quantity, 
       med_expiredate 
FROM   medicine_main_tbl 
       JOIN medicine_inventory_tbl 
         ON medicine_main_tbl.med_id = medicine_inventory_tbl.med_id 
WHERE  Coalesce(med_quantity, 0) != 0 
       AND Abs(Datediff(med_expiredate, Now())) 
ORDER  BY med_expiredate; 

SELECTбез GROUP BY

Если I GROUP BY использует любое повторяющееся значение столбца (в данном случае я использовал med_id):

SELECT с GROUP BY

Я пытаюсь получить этот вывод

Ожидаемый вывод

Выходные данные должны быть только первыми двумя из первого запроса.Очевидно, я не могу использовать LIMIT.

1 Ответ

0 голосов
/ 30 января 2019

Поскольку вы используете MariaDB, я рекомендую использовать ROW_NUMBER здесь:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY med_id ORDER BY med_expireDate) rn
    FROM yourTable
)

SELECT cpme_id, med_id, Medicine, med_purpose, med_quantity, med_expireDate
FROM cte
WHERE rn = 1;

Это предполагает, что «первой» строкой для данного лекарства является та, которая имеет самую раннюю дату истечения срока годности.Это была единственная интерпретация ваших данных, которая соответствовала ожидаемому результату.

...