我在将特定的列归为一组时遇到问题。当我使用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;
如果我GROUP BY
使用任何重复的列值(在这种情况下,我使用med_id):
我正在尝试获取此输出
输出只能是第一个查询的前两个。显然,我不能使用LIMIT。
答案 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;
这假定给定药物的“第一”行是过期时间最早的那一行。这是对数据的唯一与预期输出一致的解释。