如何在MySQL中根据开始日期和结束日期获取运行总计

mohan111:

我有如下示例数据。

Start_Dt    End_Dt     Dur_of_months  amount 
2020-01-01  2020-04-01   4             800

我在几个月的持续时间内有开始日期和结束日期。

将金额(800)除以4 = 200。

我希望每个月的总跑步次数为负(200)。

输出:

mon_dt     amount 
Jan 2020    800
Feb 2020    600
Mar 2020    400
Apr 2020    200

我有一些代码可以增加开始日期和结束日期之间的月份

SELECT ID, DATE_FORMAT(Startdate + INTERVAL n.n MONTH, '%M %Y') AS Dates
FROM dates
JOIN (
  SELECT n10.n * 10 + n1.n * 1 AS n
  FROM (
    SELECT 0 n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
    UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
    UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
  ) n10
  CROSS JOIN (
    SELECT 0 n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
    UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
    UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
  ) n1
) n ON Startdate + INTERVAL n.n MONTH <= EndDate
ORDER BY ID, Startdate + INTERVAL n.n MONTH

如何在此添加运行总计。谁能建议我。

专线小巴:

如果您正在运行MySQL 8.0,则可以为此使用递归查询:

with recursive cte as (
    select 
        start_dt, 
        end_dt, 
        dur_of_months, 
        1 lvl, 
        amount initial_amount,
        amount
    from mytable
    union all
    select
        start_dt + interval 1 month,
        end_dt,
        dur_of_months,
        lvl + 1,
        initial_amount,
        initial_amount * (1 - lvl / dur_of_months)
    from cte
    where start_dt < end_dt
)
select date_format(start_dt, '%M %Y') mon_dt, amount from cte order by start_dt

DB Fiddle上的演示

| mon_dt        | amount |
| ------------- | ------ |
| January 2020  | 800    |
| February 2020 | 600    |
| March 2020    | 400    |
| April 2020    | 200    |

在早期版本中,从现有查询开始,您将执行以下操作:

select 
    date_format(start_dt + interval n.n month, '%M %Y') as mon_dt,
    amount * (1 - n / dur_of_months) amount
from mytable
join (
  select n10.n * 10 + n1.n * 1 as n
  from (
    select 0 n union all select 1 union all select 2 union all select 3
    union all select 4 union all select 5 union all select 6
    union all select 7 union all select 8 union all select 9
  ) n10
  cross join (
    select 0 n union all select 1 union all select 2 union all select 3
    union all select 4 union all select 5 union all select 6
    union all select 7 union all select 8 union all select 9
  ) n1
) n on start_dt + interval n.n month <= end_dt
order by start_dt + interval n.n month

演示版

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在mysql中使用星期数获取开始和结束星期的日期?

如何在angularjs中获取周明智的开始和结束日期

如何在ios中获取今天日期的开始和结束时间?

如何在以UTC格式存储的dynamodb中的开始日期和结束日期之间过滤日期

如何在TraMineR中配置SPELL的开始和结束日期

如何在查询C#中检查开始日期和结束日期之间的多个日期

如何使用R中的开始日期和结束日期创建每周总计

如何从MYSQL中的日期列表中获取开始年份和结束年份

如何在SSIS中配置一个foreach循环容器以获取定义的开始日期和结束日期并在其间的每个日期运行?

如何在laravel中通过月份值并获取月份的开始和结束日期

如何根据日期在URL中传递开始日期和结束日期?

如何在PostgreSQL中编写函数以根据传递给月份的名称获取月份的开始日期和结束日期

如何在SQL Server中获取“完成年份”的星期数,开始日期和结束日期?

如果输入日期不可用,如何在oracle中获取开始日期和结束日期之间的输入日期,然后返回最大日期记录

如何在MySQL中根据任务开始日期和结束日期计算每季度的值总和?

如何基于当前周红宝石中的日期获取上周开始日期和结束日期

如何在php中获取周日开始日期和周日结束日期

如何在Android中获取年份的开始日期和结束日期?

如何在MS Access中显示开始日期和结束日期之间的日期

如何在 SSRS 报告中获取当前月份的开始和结束日期

如何在 Rails 日期字段下拉列表中设置开始日期和结束日期选项?

如何在python中获取数据序列的开始和结束日期时间段?

如何根据开始和结束获取for循环中的日期列表?

如何创建一个存储过程,在 MYSQL 中的开始日期和结束日期之间获取销售的开始日期和结束日期

如何在日期输入中默认设置开始日期和结束日期

如何在材料日期范围选择器中获取开始日期和结束日期之间的日期

如何根据开始日期和编号的选择获取自动结束日期。旅行天数

如何在SQL中从开始日期,开始时间和完成时间获取结束日期

如何在MongoDB中获取开始日期和结束日期之间的数据