MySQL问题:
这个SQL有意思,可以使用开窗函数,对原始值*天数进行一个累计求和。你试下这个:
with t as (
select 1 month, 10 origin_value, 31 days
union select 2, 20, 29 union select 3, 30, 31 union select 4, 40, 30 union select 5, 50, 31
)
select month, sum(t.origin_value*t.days) over(order by month)/sum(t.days) over(order by month) as value from t
我可以使用MySQL的日期函数DATEDIFF和PERIOD_DIFF来实现两个累计月份的天数相乘。
假设我们要将2019年8月和2019年9月的累计天数相乘,我们可以使用以下SQL语句:
SELECT DATEDIFF('2019-09-01', '2019-08-01') * PERIOD_DIFF('201909', '201908')
其中DATEDIFF('2019-09-01', '2019-08-01')函数返回两个日期之间的天数,而PERIOD_DIFF('201909', '201908')函数返回两个yyyymm格式的月份之间的月份数。
对于任意两个累计月份,我们只需要将对应的日期传入DATEDIFF函数,并将对应的yyyymm格式的月份传入PERIOD_DIFF函数即可实现累计天数的相乘操作。
代码示例:
SELECT DATEDIFF(date1, date2) * PERIOD_DIFF(concat(year(date1), month(date1)), concat(year(date2), month(date2)))
FROM table_name;
其中date1和date2是累计月份的起始日期,table_name是数据表名。
临时在增加两列,一列是累积月的值,一列是累积月天数,然后用内关联的方式,按照公式计算