分组后转置

【问题】

i need help with this i try to think about resolve this but i cant find how resolve with mysql, I need if the users have record in the week, and show this result with this form:

user 1user 2user 3
week 1yesnoyes
week 2yesyesno
week 3yesnoyes
week 4noyesyes
week 5yesnono
week 6yesnoyes

I have table user and table record

TABLESFIELDS
userid
name
recordid_user
date

【回答】

提问者告诉我们有两个表:一是用户表,二是活动记录表。后者表示用户在某日存在一条某活动的记录。问题是如何表示出用户每周是否有活动的记录,并以问题开头的样式表达出来:有记录就标记为 yes,没有就是 no。

SQL 中虽然可以静态列转置,但此问题不是统计问题,一个用户会有多个日期记录,转置不能满足我们的要求;再加上需要动态将日期转化为周序号作为条件来判断,不能轻松地用 SQL 来实现查询。用 SPL 解决这个问题可以这样做:

A
1=connect("test")
2=A1.query("select user.name,record.date,record.id_user from user, record where record.id_user=user.id").run(date=interval@w("2018-11-1",date)+1)
3=A2.group(id_user)
4=A3.max(date).new(~:week,${A3.("\"No\":"+name).concat@c()})
5=A3.run(~.run(A4(date).field(A3.#+1,"Yes")))

A1: 连接 test 数据库。

A2:查询 user 表和 record 表,将用户名和日期对应起来。将日期翻译成乘对应的周序号。

A3:根据用户 id 分组。每一组都是改组对应用户的”用户名”和“日期记录”的序列。

A4:根据 A2 找到最大周序号,并生成一个序表,含有周序号列和用户名列,用户名列的数量是根据 A3 的分组动态生成的。初始设定所有用户名列的值为“No”。

A5:根据 A3 的每组每条数据计算其在 A4 中对应的周序号——即对应 A4 第 n 条数据,用 A4(n) 取得该条目,替换其 A3 当前这个用户的值为”Yes”。

最终我们在 A4 格看到要求的结果。

A2

imagepng

A3

imagepng

A4

imagepng

A4 结果

imagepng

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值