SQL 获取日期范围

SQL Getting Date Range

我需要汇总每月按日期范围显示的费用。为了说明,请看以下内容:

示例数据

invoice_id     usage_date         cost
--------------------------------------
123            May 31, 2016         
150            June 01, 2016        
150            June 02, 2016        
150            June 03, 2016        
150            June 04, 2016        
150            June 05, 2016        
...
150            June 30, 2016        
240            July 01, 2016        

考虑到上面的数据,我想得到

想要的结果

range                   total
-----------------------------
June 01-03, 2016          
June 04-30, 2016         5

如您所见,我想将它们分组并添加具有相同 cost 的那些,但将日期显示为从开始到结束。但这必须只为每个月完成。在这种特殊情况下,假设 May 31, 2016 产生了 </code> 的成本,即使它与第二天(6 月 1 日)的成本相同,也不会被包括在内,因为它们来自不同的月份.</p> <p>我觉得我需要提供更多信息,但我不确定你们还需要什么,所以请评论您希望我添加的内容。</p> <h3>编辑</h3> <p>我不知道这是否重要,但让我添加一个用于生成上面提供的 <strong> 示例数据</strong> 的查询。</p> <h3>示例数据 - SQL</h3> <pre><code>SELECT id.invoice_id, di.usage_date, SUM(di.item_cost) AS cost FROM detail_items di LEFT JOIN invoice_details id ON id.id = di.detail_id WHERE di.group_id = 123456 GROUP BY id.invoice_id, di.usage_date

按年、月和费用汇总,并获得给定费用的最短和最长日期。然后将成本乘以给定月份的总行数以获得总数。

select to_char(mindt,'mm/dd/yyyy')||'-'||to_char(maxdt,'mm/dd/yyyy') daterange,
cnt*cost total
from (
select 
cost, min(usage_date) mindt, max(usage_date) maxdt, count(*) cnt,
to_char(usage_date,'mm') usg_mth,to_char(usage_date,'yyyy') usg_yr
from tablename
group by to_char(usage_date,'mm'),to_char(usage_date,'yyyy'),cost
) t