我有两种不同的时间戳,一种用于创建帐户的时间戳,一种用于他们首次使用产品的时间戳。如果产品的首次使用时间少于创建帐户后的24小时,则会在虚拟变量列中将其分配为1,否则将其分配为0。我想按天将其分组,而不是每个时间戳。
我尝试了GROUP BY,然后尝试了DATEADD
和DATEDIFF
的各种组合,并创建了一个显示两天之间的日期的函数,但没有任何效果。
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'
的无效参数类型
答案 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中执行相同的操作。