如何仅按一个日期将多个时间戳分组

时间:2019-06-25 18:45:59

标签: mysql sql

我有两种不同的时间戳,一种用于创建帐户的时间戳,一种用于他们首次使用产品的时间戳。如果产品的首次使用时间少于创建帐户后的24小时,则会在虚拟变量列中将其分配为1,否则将其分配为0。我想按天将其分组,而不是每个时间戳。

我尝试了GROUP BY,然后尝试了DATEADDDATEDIFF的各种组合,并创建了一个显示两天之间的日期的函数,但没有任何效果。

SELECT data.ORIGINAL_TIMESTAMP AS "data_timestamp",
       data2.ORIGINAL_TIMESTAMP AS "data2_timestamp",
       CASE
           WHEN DATEDIFF(minute, data.ORIGINAL_TIMESTAMP, data2.ORIGINAL_TIMESTAMP) <=1440 THEN 1
           ELSE 0
       END AS "24_hour_dummy_variable",
       ((SUM("24_hour_dummy_variable")) OVER (
                                              ORDER BY data.ORIGINAL_TIMESTAMP ASC rows between 999 preceding AND current row)*100) AS "running_avg"
FROM data 
LEFT JOIN data2
  ON data.ACCOUNT = data2.ACCOUNT

  GROUP BY DATEADD(day, DATEDIFF(day, 0, org_created.ORIGINAL_TIMESTAMP), 0)

函数'DATE_DIFFTIMESTAMPINMONTHS'的无效参数类型

1 个答案:

答案 0 :(得分:0)

您可以通过使用多个查询来做到这一点:

WITH table_a as 
(SELECT data.id id,
         CASE
         WHEN data.ORIGINAL_TIMESTAMP - data2.ORIGINAL_TIMESTAMP <=1 THEN 1
         ELSE 0
         END dummy_variable
FROM data 
JOIN data2
ON data.ACCOUNT = data2.ACCOUNT)
Select sum(table_a.dummy_variable) agg, trunc(data.original_timestamp)
FROM data
JOIN table_a on table_a.id = data.id
GROUP BY trunc(data.original_timestamp)

此代码用于OracleSQL,但是您也可以在MySQL中执行相同的操作。