mysql 按月累计_PostgreSQL完成按月累加的操作

本文介绍了在MySQL和PostgreSQL中如何按月进行累计统计,包括使用自关联和窗口函数两种方法,并提供了相应的SQL查询示例。此外,还展示了如何在Python中提取时间并按秒、分、时、日、周、月、年进行数据统计。
摘要由CSDN通过智能技术生成

背景

统计某个指标,指标按照月进行累加,注意需要按省份和年份进行分组。

db3ff0760caa3b360138c3aa7ffff1d4.png

方法一、使用自关联

-- with 按月统计得到中间结果

WITH yms AS (SELECT regionid,SUM(getnum) AS getnum,SUM(dealnum) AS dealnum,to_char(qndate,"yyyy-MM") AS yearmonth

FROM t_queuenumber

GROUP BY regionid,to_char(qndate,"yyyy-MM")

ORDER BY regionid,yearmonth)-- 查用子查询解决。

SELECT s1.regionid,s1.yearmonth, getnum,dealnum,

(SELECT SUM(getnum) FROM yms s2 WHERE s2.regionid = s1.regionid AND s2.yearmonth <= s1.yearmonth AND SUBSTRING(s1.yearmonth,0,5) = SUBSTRING(s2.yearmonth,0,5) ) AS getaccumulatednum,

(SELECT SUM(dealnum) FROM yms s2 WHERE s2.regionid = s1.regionid AND s2.yearmonth <= s1.yearmonth AND SUBSTRING(s1.yearmonth,0,5) = SUBSTRING(s2.yearmonth,0,5) ) AS accumulatednum

FROM yms s1;

查询的结果如下:

e56b316e1effe40a98f5a9afc5c6a78c.png

方法二、使用窗口函数

更多关于窗口函数的用法,可以参考以前的文章。窗口函数十分适合这样的场景:

WITH yms AS (SELECT regionid,SUM(getnum) AS getnum,SUM(dealnum) AS dealnum,to_char(qndate,"yyyy-MM") AS yearmonth

FROM t_queuenumber

GROUP BY regionid,to_char(qndate,"yyyy-MM")

ORDER BY regionid,yearmonth)

-- 窗口函数的使用

SELECT regionid,yearmonth,

SUM(getnum) OVER(PARTITION BY regionid,SUBSTRING(yearmonth,0,5) ORDER BY yearmonth) AS getaccumulatednum,

SUM(dealnum) OVER(PARTITION BY regionid ,SUBSTRING(yearmonth,0,5) ORDER BY yearmonth) AS dealaccumulatednum

FROM yms;

3074226381197e4f4b0c0ea9e7c64673.png

后记

可以使用子查询、可以使用窗口函数完成上面业务场景。

补充:PostgreSQL实现按秒按分按时按日按周按月按年统计数据

提取时间(年月日时分秒):

import datetime

from dateutil.relativedelta import relativedelta

today = str(datetime.datetime.now())

print(today)

print(today[:4], today[:7], today[:10],today[:13])

print("************分隔符***************")

yesterday = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime("%Y-%m-%d %H:%M:%S")

yesterday2 = (datetime.datetime.now() + dateti

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值