请教大虾给组一条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语句能否实现
...全文
71 点赞 收藏 7
写回复
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
回复 点赞
发动态
发帖子
基础和管理
创建于2007-09-28

7175

社区成员

9.5w+

社区内容

Oracle 基础和管理
社区公告
暂无公告