用一条SQL语句查询连续记录中最大个数,该怎么处理
用一条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
------解决方案--------------------
借鉴了下大神们的写法,希望对你有帮助
------解决方案--------------------
改为
..能力有限,不好意思..想不出在不取出结果的情况下,如何直接输出结果4...
这样改也只能是省了一步插入临时表的步骤..
------解决方案--------------------
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)