MySQL-分组依据,分组时仅选择第一行

MySQL-分组依据,分组时仅选择第一行,mysql,mariadb,groupwise-maximum,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

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

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

我正试图得到这个输出


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

因为您使用的是MariaDB,我建议您在这里使用
行号

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;

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

预期输出是什么预期输出应该是第一个查询中的前两行。如果您的版本为“旧”,请参阅我添加的标记。我认为
rank()如果要求从分组数据中获取第一行而不是
行编号
?@AnkitJaiswal No,
(或
稠密秩
)将返回多条记录(如果第一位存在关联)<代码>行编号
仅返回一条记录,始终如此。他在这里想要什么,这取决于OP。@TimBiegeleisen这正是我要找的!非常感谢你!