1

我需要一些关于编写查询的建议和想法,该查询返回 12 个月内每月有效或活跃的政策计数。我可以轻松地为给定月份构建它(参见简化示例),但希望找到一种方法来避免使用 JOIN 语句,这样更有效。那里的条件是我正在努力的部分。

select 'January', count(*)
from policies
where effective_date < '1/1/2012'
and expiration_date > '2/1/2012'

建议?

4

3 回答 3

1

使用 GROUP BY 根据月份聚合策略

SELECT month, count(*) FROM policies WHERE effective_date < '1/1/2012' AND expiration_date > '1/1/2013' GROUP BY month;
于 2013-01-09T01:56:11.683 回答
0

感谢那些花时间和兴趣解决我的问题的人。

我想出了一个可能尽可能高效的解决方案。我写了一个子选择语句来设置我需要报告的日期值(伪查询:

select add_months(trunc(sysdate),"month",-12) from dual
union
select add_months(trunc(sysdate),"month",-11) ..

等等),然后将其作为独立表添加到我的主查询中,该查询使用WHERE条件中的这些日期和GROUP BY. 像冠军一样工作。

再次感谢所有回复并帮助我进行一些不同思考过程的人。

于 2013-01-10T03:53:17.647 回答
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)
于 2013-01-09T02:08:03.330 回答