首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL统计学生的不同缺勤周期

SQL统计学生的不同缺勤周期
EN

Stack Overflow用户
提问于 2011-07-27 21:40:03
回答 2查看 482关注 0票数 1

我正在寻找一种方法来统计学生缺课的不同时段:

每次学生缺勤时,我都会在缺勤表中创建一条记录,有些缺勤可能会重叠,有些会延长以前的缺勤时间。

代码语言:javascript
复制
StuId    StrPer       EndPer
------   -----------  -----------
111111   2011-01-10   2011-01-15
222222   2011-02-01   2011-02-05
222222   2011-02-06   2011-02-08
333333   2011-04-07   2011-04-14
444444   2011-04-20   2011-04-25
444444   2011-04-23   2011-04-28
111111   2011-05-01   2011-05-03

现在我想要计算有间隙的唯一缺勤时间段的数量,结果应该是:

代码语言:javascript
复制
StuId   NbrAbs
------  ------
111111  2
222222  1
333333  1
444444  1

111111有两个缺勤期,中间有一个空档

222222也有两个缺勤期间,但没有空档,因此必须将其视为1个缺勤期间

333333只有1个缺勤期间

444444有2个期间重叠,也没有空档,因此必须将其视为1个缺勤期间

有人能帮我写一个查询吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-27 22:50:41

假设SQL 2005+应该可以工作:

代码语言:javascript
复制
SELECT '111111' as stuid,'2011-01-10' as start_date,'2011-01-15' as end_date into #data UNION ALL
SELECT '222222','2011-02-01','2011-02-05' UNION ALL
SELECT '222222','2011-02-06','2011-02-08' UNION ALL
SELECT '333333','2011-04-07','2011-04-14' UNION ALL
SELECT '444444','2011-04-20','2011-04-25' UNION ALL
SELECT '444444','2011-04-23','2011-04-28' UNION ALL
SELECT '111111','2011-05-01','2011-05-03' 

;with periods as
(
select 
stuid
,start_date
,end_date
,row_number() OVER (PARTITION BY stuid ORDER BY end_date ASC) as period_number
FROM #data
)
,periods2 AS
(
SELECT 
p1.stuid
,p1.start_date
,p1.end_date
,p1.period_number
,ISNULL(DATEDIFF(DD,p1.end_date,p2.start_date),1) as period_gap
from periods p1
LEFT OUTER JOIN periods p2 on p2.stuid = p1.stuid
AND p2.period_number = p1.period_number + 1
)
SELECT 
stuid
,count(period_gap) as number_discrete_absences
FROM periods2
WHERE period_gap > 0
GROUP BY stuid
票数 1
EN

Stack Overflow用户

发布于 2011-07-27 21:52:54

我不太明白你的意思,但如果你想统计学生的缺勤人数,也许这是你的办法。

代码语言:javascript
复制
SELECT `StudId`, COUNT(`StudId`) as `NbrAbs` FROM `AbsenseTableName` GROUP BY `StdId`

我没有测试代码。但这是主要的想法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6845297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档