繁体   English   中英

SQL获取日期范围

[英]SQL Getting Date Range

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

样本数据

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

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

所需结果

range                   total
-----------------------------
June 01-03, 2016          $12
June 04-30, 2016         $135

如您所见,我想将它们分组并以相同的cost添加它们,但将日期显示为开始到结束。 但这只需要每月进行一次。 在这种情况下,假设May 31, 2016产生了$4的费用,即使它与第二天(6月1日)的费用相同,也不会包括在内,因为它们来自不同的月份。

我觉得我需要提供更多信息,但是我不确定你们还需要什么,所以只评论您要我添加的内容。

编辑

我不知道这是否重要,但让我只添加一个查询,该查询用于生成上面提供的示例数据

样本数据-SQL

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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM