日期:2014-05-17  浏览次数:20766 次

用一条SQL语句查询连续记录中最大个数
ID   RESULT   DT
1    大            2012-10-01 10:01:00
2    大            2012-10-01 10:02:00
3    小            2012-10-01 10:03:00
4    大            2012-10-01 10:04:00
5    小            2012-10-01 10:05:00
6    小            2012-10-01 10:06:00
7    小            2012-10-01 10:07:00
8    小            2012-10-01 10:08:00
9    大            2012-10-01 10:09:00
10   大           2012-10-01 10:10:00
-----------------------------------
如何得到时间在2012-10-01 10:01:00和2012-10-01 10:09:00间
连续相同的RESULT的最大个数?用一条SQL语句
连续的个数如:
大2
小1
大1
小4
大1
最终得到:4
------解决方案--------------------
--建立测试
CREATE TABLE #CESHI (ID varchar(10),RESULT  varchar(10),dt DATETIME) 

--插入数据
INSERT INTO #CESHI
SELECT '1','大' ,'2012-10-01 10:01:00'
UNION 
SELECT '2','大','2012-10-01 10:02:00'
UNION 
SELECT'3','小', '2012-10-01 10:03:00'
UNION 
SELECT'4','大', '2012-10-01 10:04:00'
UNION 
SELECT'5','小', '2012-10-01 10:05:00'
UNION 
SELECT'6','小', '2012-10-01 10:06:00'
UNION 
SELECT'7','小', '2012-10-01 10:07:00'
UNION 
SELECT'8','小', '2012-10-01 10:08:00'
UNION 
SELECT'9','大', '2012-10-01 10:09:00'
UNION 
SELECT'10','大', '2012-10-01 10:10:00'

--排序
select *,num=row_number() over(order by getdate())into #tb from #CESHI order by dt

--取得数据
select result,count(1) as cnt into #jg
from(
select result,num,
gid=num-(select count(1) from #tb where result=t.result and num<t.num)
from #tb t
) a
group by result,gid
order by min(num)

--输出结果
select MAX(cnt)from #jg

--删除测试
drop table #CESHI
drop table #tb
drop table #jg


借鉴了下大神们的写法,希望对你有帮助
------解决方案--------------------
--排序
select *,num=row_number() over(order by getdate())into #tb from #CESHI order by dt

改为
;with #tb as
(select *,num=row_number() over(order by getdate()) from #CESHI )

..能力有限,不好意思..想不出在不取出结果的情况下,如何直接输出结果4...
这样改也只能是省了一步插入临时表的步骤..
------解决方案--------------------

--建立测试
CREATE TABLE #CESHI (ID varchar(10),RESULT  varchar(10),dt DATETIME)