0

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

如果我GROUP BY使用任何重复的列值(在这种情况下,我使用了 med_id):

使用 GROUP BY 选择

我正在尝试获得此输出

预期产出

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

4

1 回答 1

2

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

这假设给定药物的“第一”行是具有最早过期日期的药物。这是对您的数据的唯一解释,它与预期的输出一致。

于 2019-01-30T05:40:34.693 回答