MySQL在同一列中查找具有匹配值的行的第一行和最后一行

时间:2013-08-14 19:38:17

标签: mysql group-by match return-value multiple-columns

很抱歉这个问题的措词不好,很难准确解释我的需要。

我使用了这个查询:

select * 
from table 
where unique_id in (
  select unique_id from table group by unique_id having count(*) > 1
)

这给我一个如下结果:

id    date         unique_id
12    3/3/2013     asdf1
13    3/4/2013     asdf1
14    3/5/2013     asdf1
15    3/6/2013     asdf1
16    3/8/2013     qwer2
17    3/9/2013     qwer2
18    3/10/2013    qwer2
19    3/11/2013    zxcv3
20    3/12/2013    zxcv3
21    2/2/2012     jkl
22    2/3/2012     jkl
22    2/4/2012     jkl
23    2/5/2012     jkl
24    2/5/2012     jkl
25    2/6/2012     jkl
26    2/7/2012     jkl

我希望查询进一步优化这些结果,并留下每组匹配unique_id的第一行和最后一行

**在每组匹配的unique_id中,结果将始终遵循ID + 1和日期+ 1天的模式。
**没有记录此条件有计数(*)> 1将等于1.

所以换句话说,我希望查询只返回:

12 3/3/2013  asdf1
15 3/6/2013  asdf1
16 3/8/2013  qwer2
18 3/10/2013 qwer2
19 3/11/2013 zxcv3
20 3/12/2013 zxcv3
21 2/2/2012 jkl
26 2/7/2012 jkl

谢谢!

1 个答案:

答案 0 :(得分:2)

由于ID和日期列的排序匹配,您可以使用以下内容。

SELECT  id
        ,date
        ,unique_id
FROM    (
        SELECT  min(id) as id
                ,min(date) as date
                ,unique_id
                ,count(id) as rec_count
        from    table
        group by
                unique_id
        union
        SELECT  max(id) as id
                ,max(date) as date
                ,unique_id
                ,count(id) as rec_count
        from    table
        group by
                unique_id
        ) SQ
WHERE   SQ.rec_count > 1