例如,如果我有下表:
campaign | budget | start_date | end_date
-----------|------------|-------------|------------
Microsoft | 25400 | 2018-04-01 | 2018-06-30
VMWare | 12340 | 2018-04-01 | 2018-06-01
如何使用开始日期和结束日期为我提供广告系列有效的天数,以便我可以将该数字除以总预算以获得每日预算?我希望在2018-04-01和2018-06-30之间的日期系列中适合它。
我希望得到一张这样的表:
date | daily_budget
-----------|--------------
2018-04-01 | 486
2018-04-02 | 486
2018-04-03 | 486
(...)
2018-06-29 | 282
2018-06-30 | 282
答案 0 :(得分:0)
要获取某个范围内的所有日期,您可能会使用递归CTE。要在某个时间间隔内获取天数,您只需按日期分组即可减去并汇总不同的广告系列。 This SQL Fiddle似乎是您正在寻找的内容(下面的代码)。
WITH RECURSIVE calendar(
campaign
, budget_date
, end_date
) AS
(
SELECT
campaign
, start_date budget_date
, end_date
FROM
budgetTotal
UNION ALL
SELECT
c.campaign
, c.budget_date + 1
, c.end_date
FROM
calendar c
WHERE
c.budget_date < c.end_date
)
SELECT
c.budget_date
, ROUND(
SUM(bt.budget / (bt.end_date - bt.start_date))
, 2
) dailyBudget
FROM
budgetTotal bt
JOIN
calendar c
ON
c.budget_date BETWEEN bt.start_date AND bt.end_date
AND
c.campaign = bt.campaign
GROUP BY
c.budget_date
ORDER BY
c.budget_date