MySQL - GROUP BY, select 分组时仅第一行

MySQL - GROUP BY, select only the first row when grouping

我在将特定列归为一列时遇到问题。当我使用 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 without GROUP BY

如果我 GROUP BY 使用任何重复的列值(在本例中,我使用 med_id):

SELECT with GROUP BY

我正在尝试获取此输出

Expected Output

输出应该只是第一个查询的前两个。显然,我不能使用 LIMIT。

由于您使用的是 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;

这假定给定药物的 "first" 行是具有最早失效日期的行。这是唯一符合预期输出的数据解释。