MySQL-分组依据,分组时仅选择第一行
我在将特定列分组为一个列时遇到问题。当我使用GROUP BY时,最后一行应该是第一行时总是被选中 主要查询是: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
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这正是我要找的!非常感谢你!