Как сгруппировать много временных отметок только по одной отдельной дате - PullRequest
0 голосов
/ 25 июня 2019

У меня есть две разные временные метки: одна для создания учетной записи и одна для первого использования продукта. Если первое использование продукта менее чем через 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'

1 Ответ

0 голосов
/ 25 июня 2019

Вы можете сделать это, используя несколько запросов, таких как:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...