请教大虾给组一条SQL语句

h_wg 2005-05-15 11:16:48
有个日志表的结构是这样的:

日期 学生姓名 体温
2000-1-1 A 0
2000-1-1 B 36
2000-1-1 C 0
2000-1-2 A 0
2000-1-2 B 36
2000-1-2 C 36
2000-1-3 A 0
2000-1-3 B 36
2000-1-3 C 36

其中体温=0表示没有去测量,我想要查询连续3天没有去测体温的人,就是连续3天的日志中体温=0的学生姓名,不知道用一条SQL语句能否实现
...全文
94 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjw7789 2005-05-15
  • 打赏
  • 举报
回复

select * from table1 where 日期<=sysdate-2 and 体温=0 ;
就可以列出所有符合条件的数据
imfjl 2005-05-15
  • 打赏
  • 举报
回复
victor仔?
大聪 2005-05-15
  • 打赏
  • 举报
回复
select 学生姓名,count(*) from table1 where 日期<=sysdate-2 and 体温=0 group by 学生姓名
having count(*)>=3

//不能完全满足你的要求
imfjl 2005-05-15
  • 打赏
  • 举报
回复
按学生姓名分组,再找出体温为0的记录,再考虑怎么弄吧。
感觉一条语句不可能吧
沝林 2005-05-15
  • 打赏
  • 举报
回复
是不是连续3天以上都算连续3天的,这样的话稍微改改
select 学生姓名 from
(select count(*) over (PARTITION by 学生姓名,DIFFDATE) diffcount,学生姓名 from
(
SELECT t.* ,日期-ROW_NUMBER() OVER(PARTITION by 学生姓名 ORDER BY 日期) DIFFDATE
FROM t WHERE 体温 = 0
) )where diffcount >= 3
space6212327 2005-05-15
  • 打赏
  • 举报
回复
哥们,解决了,给分吧
SQL> select * from csdn_log;

S_DATE NAME WD
----------- -------------------- ----------
2000-1-1 A 0
2000-1-1 B 0
2000-1-1 C 0
2000-1-2 A 0
2000-1-2 B 0
2000-1-2 C 36
2000-1-3 A 0
2000-1-3 B 0
2000-1-3 C 36
2000-1-4 A 0
2000-1-4 C 0
2000-1-5 C 0

12 rows selected

SQL> select a.name from csdn_log a,csdn_log b,csdn_log c where a.wd=0 and b.wd=0 and c.wd=0 and a.s_date=b.s_date-1 and a.s_date=c.s_date+1 and a.name=b.name and a.name=c.name group by a.name;

NAME
--------------------
A
B
沝林 2005-05-15
  • 打赏
  • 举报
回复
select 学生姓名 from
(select count(*) over (PARTITION by 学生姓名,DIFFDATE) diffcount,学生姓名 from
(
SELECT t.* ,日期-ROW_NUMBER() OVER(PARTITION by 学生姓名 ORDER BY 日期) DIFFDATE
FROM t WHERE 体温 = 0
) )where diffcount = 3

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧