mysql - 带减法的 SQL 数据透视表
问题描述
我正在使用 SQL,我有三列user_id、user_action 和 timestamp,它们将时间戳应用于编号为 1 到 5 的五种不同类型的用户操作。
在几年的时间里,我有几千个用户 ID 和操作。原始数据示例
- 首先,我需要创建一个数据透视表,其中仅包含两个 user_actions 的时间戳,按 user_id 分组,然后创建一个减去时间差的全新列 - 将此列称为 time_difference。
Caius Jard 在评论中提供的代码适用于此部分。
- 现在,我需要添加另一列周数(TIMESTAMP 是 DATETIME2 格式,所以我需要合并
DATEPART(week, timestamp) as week
进入此代码并使用它根据周数和 time_difference 创建两周移动平均线。
解决方案
这不是整个问题的完整答案。这是第 1 步的存根:
SELECT
user,
MAX(CASE WHEN action = 2 THEN action END) as action2,
MAX(CASE WHEN action = 5 THEN action END) as action5,
DATEDIFF(
MAX(CASE WHEN action = 2 THEN action END),
MAX(CASE WHEN action = 5 THEN action END)
) as days_between
FROM t
WHERE action in (2,5)
GROUP BY user
尽管这不会计算您的减号列-我不完全确定时间戳是什么数据类型以及是否可以进行任何直接数学运算,或者它是否是需要转换的字符串。如果您可以将此详细信息添加到您的 q 这将有所帮助(或发表评论)
我无法轻松理解您的第 2 步,请通过提供预期结果来增强您的 q
推荐阅读
- amazon-web-services - AWS Athena 导入 CSV 文件
- python-3.x - 多行 Jinja 语句
- node.js - NPM 服务器不是从 AWS 实例的用户数据开始的?
- java - 访问 Spring Filter/HandlerInterceptor 多部分和参数(表单字段)
- python - 从文本文件中删除空行、点和逗号
- typescript - 函数类型的可区分联合?
- javascript - 嵌套在输入中时如何设置复选框的样式
- php - centos7上laravel和php上传问题
- imagesharp - 使用 ImageSharp 创建缩略图 - 性能改进?
- node.js - 插入到另一个有关系的表中