很抱歉这个问题的措词不好,很难准确解释我的需要。
我使用了这个查询:
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
谢谢!
答案 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