我正在尝试从表tbl_loan中选择max transaction_num并按c_id对其进行分组,以避免重复c_id。
这是我的查询
SELECT * FROM `tbl_loan` WHERE transaction_num IN (SELECT max(transaction_num) max_trans FROM tbl_loan GROUP BY c_id)
仍然有重复的c_id。
答案 0 :(得分:2)
带有GROUP BY子句的MySQL MAX
要查找每个组的最大值,请在SELECT语句中将MAX函数与GROUP BY子句一起使用。
您使用以下查询:
SELECT
*, MAX(transaction_num)
FROM
tbl_loan
GROUP BY c_id
ORDER BY MAX(transaction_num);
答案 1 :(得分:1)
这样想吧
您的查询:
SELECT * FROM `tbl_loan` WHERE transaction_num IN (SELECT max(transaction_num) max_trans FROM tbl_loan GROUP BY c_id)
假设您的子查询返回一个transaction_num,为20。对于多个c_id,该20可以相同。
因此您的外部查询正在运行
SELECT * FROM `tbl_loan` WHERE transaction_num IN (20)
并返回所有这些结果。
答案 2 :(得分:1)
从外观上,如果我错了,请纠正我。每当发生新事务时,每个C_ID的事务编号似乎都是顺序的。还有一个“ I_ID”列,它似乎是一个不会重复的自动递增列。看起来您的交易编号是每个C_ID依次为1、2、3等,以便进行简单计数,因此每个人都以1开头,而拥有更多事务的人则拥有2甚至3rd等。
因此,如果这是准确的,并且您想要每个C_ID最近的记录,则您确实想要每个C_ID的最大值“ I_ID”,因为将存在多个记录,其值为2、3等...
尝试一下。
SELECT
TL.*
FROM
tbl_loan TL
JOIN ( SELECT C_ID, max(I_ID) maxI_ID
FROM tbl_loan
GROUP BY c_id) MaxPer
on TL.I_ID = MaxPer.MaxI_ID
因此,从C_ID = 55的数据中,您有I_ID = 61(trans num = 1)和62(trans num = 2)。因此,对于ID = 55,您需要事务I_ID = 62,它代表第二个事务。
对于C_ID = 70,它的I_ID为77和78,其中I_ID = 78。
其余的只有一个转码,并且将获得其唯一的条目ID。
HTH