要实现连续 30 天的相关统计的方法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
onhao
V2EX    程序员

要实现连续 30 天的相关统计的方法

  •  
  •   onhao 2021-12-16 10:58:54 +08:00 3166 次点击
    这是一个创建于 1393 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题:

    eg

    1.在程序里,请求 30 天的数据
    2.在数据库里直接调取 30 天的数据。

    看楼主的实现方法

    20 条回复    2021-12-16 22:16:19 +08:00
    xuanbg
        1
    xuanbg  
       2021-12-16 11:07:19 +08:00
    行转列,case .... then ... when ... end as day1, case .... then ... when ... end as day2, ...
    hushulin
        2
    hushulin  
       2021-12-16 11:15:59 +08:00
    使用 mysql8 的窗口函数应该也能实现你的需求吧
    dqzcwxb
        3
    dqzcwxb  
       2021-12-16 11:17:07 +08:00
    内存够,查 30 次(每天)的数据一天天做比对
    内存不够,初始化查两天的数据,比对出连续签到的数据再查下一天数据继续比对,如果内存还是不够可以改成分页

    优化点:多线程并行查询,多线程并行比对,转 map 比对,利用 redis(zset 是跳表)存储数据和比对

    用数据库解决只会带来无穷无尽的麻烦
    neptuno
        4
    neptuno  
       2021-12-16 11:26:35 +08:00 via iPhone
    这种统计还是每天跑数据去分析吧,记录每家店每天的分析数据
    PerFectTime
        5
    PerFectTime  
       2021-12-16 11:56:06 +08:00
    1.写个表值函数,获取指定范围内日期的格式化字符串 yyyy-MM-dd
    2.按天分组汇总结果,结果表 JOIN 表值函数,处理后得出报表
    onhao
        6
    onhao  
    OP
       2021-12-16 12:37:58 +08:00
    @xuanbg 貌似不行?可能是 需求的问题。

    @hushulin 可以贴下代码不,借鉴下。

    @dqzcwxb 数据库查基础数据,再在程序里做对应的运算

    @neptuno 也不失为一个办法。

    @PerFectTime 表值函数是自定义还是系统自带的?-可以贴下代码不,
    Saxton
        7
    Saxton  
       2021-12-16 12:48:39 +08:00
    这个需求我做过,我是用 SQL+代码逻辑算出来的 没用统计表
    2i2Re2PLMaDnghL
        8
    2i2Re2PLMaDnghL  
       2021-12-16 13:09:57 +08:00
    题目描述不清

    问:已知数据库存稀疏表其中 0 值不存,在何处填充 0
    1. 在业务逻辑中填充
    2. 在 SQL 语句中填充

    答:两种差得不是特别多,实际得看你的业务将其视为数据的一部分还是业务的一部分。
    也就是说,当且仅当数据库原本设计为保存 0 ,之后优化数据库结构才产生的空洞,则应用 SQL 处理
    否则应用业务代码处理
    onhao
        9
    onhao  
    OP
       2021-12-16 13:31:43 +08:00
    @2i2Re2PLMaDnghL 按日期分组( group by) 后 得到的值可能会存在某些日期没有数据则就没有对应日期,那么连接一张连续日期的表, 即可解决这个问题。
    2i2Re2PLMaDnghL
        10
    2i2Re2PLMaDnghL  
       2021-12-16 13:38:47 +08:00
    @onhao SQL select 出来没有对应日期就没有对应日期,不是什么问题,后端补就是了,甚至可以前端再补。
    PerFectTime
        11
    PerFectTime  
       2021-12-16 13:43:15 +08:00   1
    @onhao #9 自己写表值函数,我这个示例是按月的,可以自己改改。献丑了

    https://gist.github.com/IcedMango/35f40e36b674bf3c27212d004d20f871


    SELECT *
    FROM dbo.getRangeMonthList('2020-01-01', '2021-12-01');
    结果如下图
    onhao
        12
    onhao  
    OP
       2021-12-16 13:59:37 +08:00
    @2i2Re2PLMaDnghL #10 能数据库解决,且并不花销很大资源,能不麻烦前后端皆大欢喜^_^

    @Saxton 看来我们是一样的啊

    @PerFectTime 一直想实现你这个自定义函数,对就是这个味!
    Saxton
        13
    Saxton      2021-12-16 15:25:51 +08:00
    @onhao 我是数据库查 然后代码补全的 光靠 SQL 是超级麻烦的
    yohole
        14
    yohole  
       2021-12-16 15:38:50 +08:00
    这个需求在我工作一两年的时候做过类似,当时写了至今认为最难维护,性能最差的 SQL (手动狗头)
    2i2Re2PLMaDnghL
        15
    2i2Re2PLMaDnghL  
       2021-12-16 15:40:14 +08:00
    @onhao 恰当的、一致的职责划分是可维护性的必要条件
    pengtdyd
        16
    pengtdyd  
       2021-12-16 15:40:59 +08:00
    上大数据
    onhao
        17
    onhao  
    OP
       2021-12-16 16:42:38 +08:00
    @yohole 可以分享下过程不 (手动狗头)

    @2i2Re2PLMaDnghL #15 我竟然无力反驳(手动狗头)

    @pengtdyd 30 天的数据应该还上不到 大数据 (手动狗头)
    leeg810312
        18
    leeg810312  
       2021-12-16 19:08:59 +08:00 via Android
    这么多年的开发经验就是这种需求做离线统计,一般是每天凌晨做一次,第二天可查。至于实现方式没有什么最佳实践,可以存储过程,也可以用程序跑,反正都是凌晨低峰时间
    Valid
        19
    Valid  
       2021-12-16 20:35:51 +08:00
    每天记录,不然的话以后很痛苦
    onhao
        20
    onhao  
    OP
       2021-12-16 22:16:19 +08:00
    @Valid 是的,每天都记录。
    具体的需求:一个链接 当天进来的用户 在未来 30 天的充值情况,然后每天都会进来新的用户,一天天的算未来 30 天的充值情况。


    @leeg810312 是的我们好多定时任务都是在低峰执行,不过这个需求,都是直接从充值表调数据。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1098 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 23:16 PVG 07:16 LAX 16:16 JFK 19:16
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86