【问题标题】:how to optimize my oracle sql?如何优化我的 oracle sql?
【发布时间】:2017-12-19 00:44:57
【问题描述】:

我需要在两个日期范围内计数,这个 sql 可以工作,bug 不是更好,你能帮帮我吗?

select dmc.doctor_id,
(
    select count(*)
    from hele_dct_member_config dmc
    WHERE (EXTRACT(YEAR FROM dmc.start_time) = 2016 OR EXTRACT(YEAR FROM dmc.end_time) = 2016) AND dmc.status=1
    AND TO_DATE('2016-01-31', 'yyyy-mm-dd') BETWEEN start_time AND end_time
) Jan,
(
    select count(*)
    from hele_dct_member_config dmc
    WHERE (EXTRACT(YEAR FROM dmc.start_time) = 2016 OR EXTRACT(YEAR FROM dmc.end_time) = 2016) AND dmc.status=1
    AND TO_DATE('2016-02-28', 'yyyy-mm-dd') BETWEEN start_time AND end_time
) Feb,
.
.
.
from hele_dct_member_config dmc
enter code here
WHERE (EXTRACT(YEAR FROM dmc.start_time) = 2016 OR EXTRACT(YEAR FROM dmc.end_time) = 2016) AND dmc.status=1
grouy by dmc.doctor_id

我需要在两个日期范围内计数,这个 sql 可以工作,bug 不是更好,你能帮帮我吗?

【问题讨论】:

    标签: sql oracle conditional-aggregation


    【解决方案1】:

    使用条件聚合:

    select dmc.doctor_id,
           sum(case when date '2016-01-31' BETWEEN start_time AND end_time then 1 else 0
               end) as Jan,
           sum(case when date '2016-02-31' BETWEEN start_time AND end_time then 1 else 0
               end) as Feb,
        .
        .
        .
    from hele_dct_member_config dmc
    where (extract(year from dmc.start_time) = 2016 or
           extract(year from dmc.end_time) = 2016) AND
          dmc.status = 1
    group by dmc.doctor_id;
    

    【讨论】:

      【解决方案2】:

      如果我想得到季度数?这是一种方式

         SUM(case when date '2016-01-31' BETWEEN start_time AND end_time then 1 else 0 end) + 
         SUM(case when date '2016-02-28' BETWEEN start_time AND end_time then 1 else 0 end) + 
         SUM(case when date '2016-03-31' BETWEEN start_time AND end_time then 1 else 0 end)  one
      

      【讨论】:

        猜你喜欢
        • 2016-02-29
        • 1970-01-01
        • 2014-12-22
        • 2015-01-31
        • 2018-12-25
        • 2016-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多