SQL查询计算近几天,近几个季度,近一年的数据

近一年:

     <select id="getTotalTrend" resultType="java.util.HashMap">
          select nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'01',vd_count,0)),0) nums1,nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'02',vd_count,0)),0) nums2,
        nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'03',vd_count,0)),0) nums3,nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'04',vd_count,0)),0) nums4,
        nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'05',vd_count,0)),0) nums5,nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'06',vd_count,0)),0) nums6,
        nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'07',vd_count,0)),0) nums7,nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'08',vd_count,0)),0) nums8,
        nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'09',vd_count,0)),0) nums9,nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'10',vd_count,0)),0) nums10,
        nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'11',vd_count,0)),0) nums11,nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'12',vd_count,0)),0) nums12
        
        from vd_basisdata_etl  where  to_char(to_date(op_date,'yyyy-MM-dd'), 'yyyy') = #{year,jdbcType=VARCHAR}
      </select>

去年:

    SimpleDateFormat format = new SimpleDateFormat("yyyy");
    Calendar c = Calendar.getInstance();
		c.setTime(new Date());
        c.add(Calendar.YEAR, -1);
        Date y = c.getTime();
        String year = format.format(y);
        map.put("year", year);
      <select id="getTotalTrendLastyear" resultType="java.util.HashMap">
        select nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'01',vd_count,0)),0) nums1,nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'02',vd_count,0)),0) nums2,
        nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'03',vd_count,0)),0) nums3,nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'04',vd_count,0)),0) nums4,
        nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'05',vd_count,0)),0) nums5,nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'06',vd_count,0)),0) nums6,
        nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'07',vd_count,0)),0) nums7,nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'08',vd_count,0)),0) nums8,
        nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'09',vd_count,0)),0) nums9,nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'10',vd_count,0)),0) nums10,
        nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'11',vd_count,0)),0) nums11,nvl(sum(decode(to_char(to_date(op_date,'yyyy-mm-dd'),'mm'),'12',vd_count,0)),0) nums12
        
        from vd_basisdata_etl  where  to_char(to_date(op_date,'yyyy-MM-dd'), 'yyyy') = #{year,jdbcType=VARCHAR}
      </select>

近三年:

<!--上报分年 -->
        <select id="getPatientNumByYear" resultType="java.util.HashMap">
          select 
     nvl(sum(decode(to_char(REPORT_TIME,'yyyy'),to_char(add_months(sysdate, -24), 'yyyy'),1,0)),0) nums1,
     nvl(sum(decode(to_char(REPORT_TIME,'yyyy'),to_char(add_months(sysdate, -12), 'yyyy'),1,0)),0) nums2,
     nvl(sum(decode(to_char(REPORT_TIME,'yyyy'),to_char(add_months(sysdate, 0), 'yyyy'),1,0)),0) nums3
      
        from STROKE
        where 1=1   
    </select>

近几个季度:

    <!--上报分季度 -->
        <select id="getPatientNumBySeason" resultType="java.util.HashMap">
         select nvl(sum(decode(to_char(REPORT_TIME,'mm'),'01',1,'02',1,'03',1,0)),0) nums1,
           nvl(sum(decode(to_char(REPORT_TIME,'mm'),'04',1,'05',1,'06',1,0)),0) nums2,
            nvl(sum(decode(to_char(REPORT_TIME,'mm'),'07',1,'08',1,'09',1,0)),0) nums3,
            nvl(sum(decode(to_char(REPORT_TIME,'mm'),'10',1,'11',1,'12',1,0)),0) nums4
        from STROKE
        where 1=1 
      </select>

近几天:

    <!--上报分天 -->
        <select id="getPatientNumByDay" resultType="java.util.HashMap">
     select
          COALESCE(b.zs,0) as zs,
	a.today
	from ((SELECT 
    to_char (SYSDATE- LEVEL + 1, 'mm/dd') today
    FROM
    DUAL connect BY LEVEL &lt;= 5) a 
    left join (
    select count(0) as zs ,  to_char (o.REPORT_TIME, 'mm/dd') REPORT_TIME from STROKE  o GROUP BY to_char (o.REPORT_TIME, 'mm/dd'))b
    on a.today=b.REPORT_TIME) order by a.today
</select>

猜你喜欢

转载自blog.csdn.net/sinat_25311845/article/details/86631727