Re: [SQL ] 如何统计连续的状态?

楼主: cutekid (可爱小孩子)   2020-04-09 22:48:20
网址: http://sqlfiddle.com/#!9/4bdc57/10
#测资
create table sdb(sid char(1),grade int,date char(8));
insert into sdb values
('A',20,'20200401'),('A',48,'20200402'),('A',65,'20200403'),
('A',49,'20200404'),('A',71,'20200405'),('A',56,'20200406'),
('A',61,'20200407'),('A',55,'20200408'),('A',72,'20200409'),
('A',68,'20200410'),
('B',61,'20200401'),('B',61,'20200402'),('B',61,'20200403'),
('B',61,'20200404'),('B',61,'20200405'),('B',61,'20200406'),
('B',61,'20200407'),('B',61,'20200408'),('B',72,'20200409'),
('B',68,'20200410')
#查询结果
select sid,count(*) - max(if(grade<=60,num,0)) as ans
from (
select
sid,grade,
if(@sid = sid,@num:[email protected]+1,@num:=1) as num,
@sid := sid
from (
select * from sdb order by sid,date
) t1,(select @sid,@num) t2
) result
group by sid
※ 引述《jami520 (ALEN)》之铭言:
: (针对 SQL 语言的问题,用这个标题。请用 Ctrl+Y 砍掉这行)
: 数据库名称:mysql
: 数据库版本:5.0
: 内容/问题描述:目前有个学生资料表 sdb
: pid sid(学生代码) grade(分数) gdate(日期)
: 我想要列出到最近一天,每位学生分数>60分的连续天数
: 假设有位学生这十天(远->近),分数如下
: 20, 48, 65, 49, 71, 56, 61, 55, 72, 68
: 这样这位学生就是2天(72与68)
: 而我想要用一段SQL语法去把每位学生这十天的情况都列出来
: 不晓得要怎样来写呢? 谢谢
作者: jami520 (我的生命因你而发光)   2020-04-10 06:06:00
非常感谢!
作者: SeanBoog (施吉祥先生)   2020-04-12 14:33:00
感谢!前阵子遇到累似问题也想了很久

Links booklink

Contact Us: admin [ a t ] ucptt.com