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 および日付 + 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

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 に答える