2012-09-11 138 views
4

下面是表格数据(一小段),基本上我正在查询按照accoutn数字分组时最小的original_date_ctr行。mysql group by min

我试过使用HAVING(MIN()),并在哪里= Min()和其他方式没有运气。

这里正确的结果会给我id_ctr 688,1204和1209

id_ctr account_number_cus original_date_ctr mrc_ctr 
------ ------------------ ----------------- ---------- 
    688    20062 2008-05-17    138.97 
    1204    151604 2006-08-10   42000.00 
    1209    151609 2006-06-29    968.68 
    1367    20062 2011-10-27    207.88 
    1434    151609 2009-09-10   1469.62 
    1524    151604 2009-09-01   36999.99 
    1585    151609 2012-05-31   1683.88 

回答

3

为此,您可以通过以下方式:

select t1.id_ctr, 
    t1.account_number_cus, 
    t1.original_date_ctr, 
    t1.mrc_ctr 
from yourtable t1 
inner join 
(
    select min(original_date_ctr) as mindate, account_number_cus 
    from yourtable 
    group by account_number_cus 
) t2 
    on t1.account_number_cus = t2.account_number_cus 
    and t1.original_date_ctr = t2.mindate 

看到SQL Fiddle with Demo

9

与加盟这样做会更快:

SELECT a.* 
FROM mytable a 
LEFT JOIN mytable b 
    ON a.account_number_cus = b.account_number_cus 
    AND b.original_date_ctr < a.original_date_ctr 
WHERE b.id_ctr IS NULL 
+6

这应该是被接受的答案,MySQL中的派生表是性能杀手。 –