在SQL中选择具有相同ID的最大数字

时间:2018-07-23 02:48:47

标签: mysql phpmyadmin

我正在尝试从表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)

我的输出是enter image description here

仍然有重复的c_id。

3 个答案:

答案 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