我需要一些关于编写查询的建议和想法,该查询返回12个月内每月有效或有效的策略计数。我可以轻松地在给定月份内构建它(参见简化示例),但希望找到一种方法来避免使用JOIN语句,这样更有效。在那里,条件是我正在努力的部分。
select 'January', count(*)
from policies
where effective_date < '1/1/2012'
and expiration_date > '2/1/2012'
建议?
答案 0 :(得分:1)
使用GROUP BY汇总基于月的政策
SELECT month, count(*) FROM policies WHERE effective_date < '1/1/2012' AND expiration_date > '1/1/2013' GROUP BY month;
答案 1 :(得分:0)
select
datename(m,p.effective_date) as mymonth,
count(*)
from policies p
where effective_date BETWEEN '1 jan 2012' AND '31 dec 2012'
and expiration_date BETWEEN '1 jan 2012' AND '31 dec 2012'
group by datename(m,p.effective_date)
答案 2 :(得分:0)
感谢那些花时间和兴趣解决问题的人。
我想出了一个可能有效的解决方案。我编写了一个子选择语句,用于设置我需要报告的日期值(伪查询:
select add_months(trunc(sysdate),"month",-12) from dual
union
select add_months(trunc(sysdate),"month",-11) ..
依此类推),然后将其作为独立表添加到我的主要查询中,该查询使用WHERE
条件和GROUP BY
中的日期。像冠军一样工作。
再一次,感谢所有回应并帮助我完成不同思考过程的人。