当前位置: 代码迷 >> Oracle开发 >> sql,查询一个月内数据的总量,该如何解决
  详细解决方案

sql,查询一个月内数据的总量,该如何解决

热度:96   发布时间:2016-04-24 06:39:02.0
sql,查询一个月内数据的总量
比如:表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语句怎么写啊?
------解决方案--------------------
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');

------解决方案--------------------

select count(*), to_char(p.admission_date_time, 'yyyy-mm')
  from pat_visit p
 group by to_char(p.admission_date_time, 'yyyy-mm')
--不可以酱紫?

------解决方案--------------------
引用:

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 可以这样了
------解决方案--------------------
是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

------解决方案--------------------
计算每天多少人
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;

------解决方案--------------------
用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);
  相关解决方案