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

时间:2019-01-30 05:26:16

标签: mysql mariadb groupwise-maximum

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

1 个答案:

答案 0 :(得分:1)

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

这假定给定药物的“第一”行是过期时间最早的那一行。这是对数据的唯一与预期输出一致的解释。