sql,查询一个月内数据的总量

baidu_18698117 2014-07-31 11:44:14
比如:表pat_visit中,要算出7月份每天在院人数的累加数据,即要算出7月1号的数据:
select count(*)
from pat_visit p
where p.admission_date_time <= to_date('2014-07-01', 'yyyy-MM-dd')
and p.discharge_date_time >= to_date('2014-07-01', 'yyyy-MM-dd');

再算出7月2号的数据,直到31号结束,并把1号到31号的数据累加起来;
sql语句怎么写啊?
...全文
681 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangdh12 2014-07-31
  • 打赏
  • 举报
回复
可以查询一下 roll up函数的用法。
huangdh12 2014-07-31
  • 打赏
  • 举报
回复
分成两条语句不行吗? 每天的用group算出来, 总的 再用一条语句
bw555 2014-07-31
  • 打赏
  • 举报
回复
用rollup的写法
select B.RQ,COUNT(1)
from pat_visit A,(select to_date('20140701','yyyymmdd')+rownum-1 RQ from dual connect by rownum<=31)B 
WHERE TRUNC(A.admission_date_time)<=B.RQ AND TRUNC(A.discharge_date_time)>=B.RQ
GROUP BY ROLLUP(B.RQ);
baidu_18698117 2014-07-31
  • 打赏
  • 举报
回复
牛人。终于整出来了,太谢谢了
bw555 2014-07-31
  • 打赏
  • 举报
回复
计算每天多少人
select B.RQ,COUNT(1)
from pat_visit A,(select to_date('20140701','yyyymmdd')+rownum-1 RQ from dual connect by rownum<=31)B 
WHERE TRUNC(A.admission_date_time)<=B.RQ AND TRUNC(A.discharge_date_time)>=B.RQ
GROUP BY B.RQ;
计算月度总和
select sum(COUNT(1))
from pat_visit A,(select to_date('20140701','yyyymmdd')+rownum-1 RQ from dual connect by rownum<=31)B 
WHERE TRUNC(A.admission_date_time)<=B.RQ AND TRUNC(A.discharge_date_time)>=B.RQ
GROUP BY B.RQ;
天堂的鸽子 2014-07-31
  • 打赏
  • 举报
回复
是Oracle数据库吧,试试下面的:
select to_date('2014-07-01', 'yyyy-MM-dd') as rq ,count(*)
  from pat_visit p
 group by to_date('2014-07-01', 'yyyy-MM-dd')
 with rollup
huangdh12 2014-07-31
  • 打赏
  • 举报
回复
引用 5 楼 z_shousi 的回复:

select count(*), to_char(p.admission_date_time, 'yyyy-mm')
  from pat_visit p
 group by to_char(p.admission_date_time, 'yyyy-mm')
--不可以酱紫?
题目意思,我觉得是 每天的量加一个汇总。 记得好像 roll up over 可以这样了
  • 打赏
  • 举报
回复

select count(*), to_char(p.admission_date_time, 'yyyy-mm')
  from pat_visit p
 group by to_char(p.admission_date_time, 'yyyy-mm')
--不可以酱紫?
bw555 2014-07-31
  • 打赏
  • 举报
回复
select sum(
least(to_date('2014-07-31', 'yyyy-MM-dd'),trunc(discharge_date_time))
- greatest(to_date('2014-07-01', 'yyyy-MM-dd'),trunc(admission_date_time))
+1
)
 from pat_visit p
 where trunc(p.admission_date_time) <= to_date('2014-07-31', 'yyyy-MM-dd')
 and trunc(p.discharge_date_time) >= to_date('2014-07-01', 'yyyy-MM-dd');
bw555 2014-07-31
  • 打赏
  • 举报
回复
引用 楼主 baidu_18698117 的回复:
比如:表pat_visit中,要算出7月份每天在院人数的累加数据,即要算出7月1号的数据: select count(*) from pat_visit p where p.admission_date_time <= to_date('2014-07-01', 'yyyy-MM-dd') and p.discharge_date_time >= to_date('2014-07-01', 'yyyy-MM-dd'); 再算出7月2号的数据,直到31号结束,并把1号到31号的数据累加起来; sql语句怎么写啊?
转换一下思路,可以计算每个病人7月份在医院呆了几天,把所有人天数累加,和你要的结果应该是一样的,但是复杂度要下降好多

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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