Mysql Group By,Order By,Count,Min()组合

时间:2013-04-02 13:06:50

标签: mysql group-by having-clause

我有一张包含大量地址记录的表格。新数据被添加到表中,我想查找与现有名称,邮政编码,街道匹配的所有新记录,以及已分配给同一client_id(1)的所有新记录以及某些其他标准(结果代码)。我正在努力的部分是获取与现有记录匹配的新记录的id。

现有记录的日期为date_exported int(8),添加的新记录的date_exported为0。

在date_exported字段周围使用带有MIN的下面的SQL,它显示了0个date_exported记录,但由于分组和拥有,ID没有与SQL的其余部分一起排序。如果没有MIN,它会显示正确的id和数据,但是对于带有date_exported的旧记录!= 0 - 我想找到添加了date_exported = 0的新记录

SELECT id, name, postcode, street, result_code, MIN(date_exported), COUNT(*) AS cnt 
  FROM fulf.third_party 
 where client_id = '1' 
   and (result_code >= '0' 
   and result_code < '1000' and result_code != '400')  
 GROUP BY name, postcode, street having cnt > 1 order by id asc

1 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

select t.*
from (
    SELECT name, postcode, street, MIN(date_exported) as MinDate, COUNT(*) AS cnt 
    FROM fulf.third_party 
    where client_id = '1' 
        and (result_code >= '0' 
        and result_code < '1000' and result_code != '400')  
    GROUP BY name, postcode, street 
    having cnt > 1 
 ) tm
inner join fulf.third_party t on tm.name = t.name
    and tm.postcode = t.postcode 
    and tm.street = t.street
    and tm.MinDate = t.date_exported