1
xuanbg 2021-12-16 11:07:19 +08:00
行转列,case .... then ... when ... end as day1, case .... then ... when ... end as day2, ...
|
2
hushulin 2021-12-16 11:15:59 +08:00
使用 mysql8 的窗口函数应该也能实现你的需求吧
|
3
dqzcwxb 2021-12-16 11:17:07 +08:00
内存够,查 30 次(每天)的数据一天天做比对
内存不够,初始化查两天的数据,比对出连续签到的数据再查下一天数据继续比对,如果内存还是不够可以改成分页 优化点:多线程并行查询,多线程并行比对,转 map 比对,利用 redis(zset 是跳表)存储数据和比对 用数据库解决只会带来无穷无尽的麻烦 |
4
neptuno 2021-12-16 11:26:35 +08:00 via iPhone
这种统计还是每天跑数据去分析吧,记录每家店每天的分析数据
|
5
PerFectTime 2021-12-16 11:56:06 +08:00
1.写个表值函数,获取指定范围内日期的格式化字符串 yyyy-MM-dd
2.按天分组汇总结果,结果表 JOIN 表值函数,处理后得出报表 |
6
onhao OP @xuanbg 貌似不行?可能是 需求的问题。
@hushulin 可以贴下代码不,借鉴下。 @dqzcwxb 数据库查基础数据,再在程序里做对应的运算 @neptuno 也不失为一个办法。 @PerFectTime 表值函数是自定义还是系统自带的?-可以贴下代码不, |
7
Saxton 2021-12-16 12:48:39 +08:00
这个需求我做过,我是用 SQL+代码逻辑算出来的 没用统计表
|
8
2i2Re2PLMaDnghL 2021-12-16 13:09:57 +08:00
题目描述不清
问:已知数据库存稀疏表其中 0 值不存,在何处填充 0 1. 在业务逻辑中填充 2. 在 SQL 语句中填充 答:两种差得不是特别多,实际得看你的业务将其视为数据的一部分还是业务的一部分。 也就是说,当且仅当数据库原本设计为保存 0 ,之后优化数据库结构才产生的空洞,则应用 SQL 处理 否则应用业务代码处理 |
9
onhao OP @2i2Re2PLMaDnghL 按日期分组( group by) 后 得到的值可能会存在某些日期没有数据则就没有对应日期,那么连接一张连续日期的表, 即可解决这个问题。
|
10
2i2Re2PLMaDnghL 2021-12-16 13:38:47 +08:00
@onhao SQL select 出来没有对应日期就没有对应日期,不是什么问题,后端补就是了,甚至可以前端再补。
|
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'); 结果如下图 |
12
onhao OP @2i2Re2PLMaDnghL #10 能数据库解决,且并不花销很大资源,能不麻烦前后端皆大欢喜^_^
@Saxton 看来我们是一样的啊 @PerFectTime 一直想实现你这个自定义函数,对就是这个味! |
14
yohole 2021-12-16 15:38:50 +08:00
这个需求在我工作一两年的时候做过类似,当时写了至今认为最难维护,性能最差的 SQL (手动狗头)
|
15
2i2Re2PLMaDnghL 2021-12-16 15:40:14 +08:00
@onhao 恰当的、一致的职责划分是可维护性的必要条件
|
16
pengtdyd 2021-12-16 15:40:59 +08:00
上大数据
|
17
onhao OP |
18
leeg810312 2021-12-16 19:08:59 +08:00 via Android
这么多年的开发经验就是这种需求做离线统计,一般是每天凌晨做一次,第二天可查。至于实现方式没有什么最佳实践,可以存储过程,也可以用程序跑,反正都是凌晨低峰时间
|
19
Valid 2021-12-16 20:35:51 +08:00
每天记录,不然的话以后很痛苦
|
20
onhao OP @Valid 是的,每天都记录。
具体的需求:一个链接 当天进来的用户 在未来 30 天的充值情况,然后每天都会进来新的用户,一天天的算未来 30 天的充值情况。 @leeg810312 是的我们好多定时任务都是在低峰执行,不过这个需求,都是直接从充值表调数据。 |