0

对不起,这个问题的措辞不好,很难准确地解释我需要什么。

我使用了这个查询:

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 和 date + 1 天的模式。
** 没有此条件的 count(*) > 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

谢谢!

4

1 回答 1

3

由于 hte 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 
于 2013-08-14T19:53:26.190 回答