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
我需要汇总每月按日期范围显示的费用。为了说明,请看以下内容:
示例数据
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