mysql累计月*累计月天数

MySQL问题:

img


这种mysql 有什么样方法能写吗?
想了好几种 好像都实行不了
如果单纯实现 3月值的累计+1+2+3月好写 但是还要加上个天数

这个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
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以使用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是数据表名。

临时在增加两列,一列是累积月的值,一列是累积月天数,然后用内关联的方式,按照公式计算