首页 > 解决方案 > 带减法的 SQL 数据透视表

问题描述

我正在使用 SQL,我有三列user_id、user_action 和 timestamp,它们将时间戳应用于编号为 1 到 5 的五种不同类型的用户操作。

在几年的时间里,我有几千个用户 ID 和操作。原始数据示例

  1. 首先,我需要创建一个数据透视表,其中仅包含两个 user_actions 的时间戳,按 user_id 分组,然后创建一个减去时间差的全新列 - 将此列称为 time_difference

Caius Jard 在评论中提供的代码适用于此部分。

  1. 现在,我需要添加另一列周数(TIMESTAMP 是 DATETIME2 格式,所以我需要合并

DATEPART(week, timestamp) as week进入此代码并使用它根据周数和 time_difference 创建两周移动平均线。

标签: mysqlsql

解决方案


这不是整个问题的完整答案。这是第 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


推荐阅读