SQL-запрос: сгруппировать, вычислить разницу между максимальным и минимальным в группе и снова сгруппировать - PullRequest
0 голосов
/ 16 мая 2018

Моя БД содержит идентификатор пользователя в первом столбце и временную метку какого-либо действия (войдите или нажмите кнопку). Первая запись (ИД пользователя, время) всегда входит в систему пользователя, иногда есть и вторая, что означает, что пользователь также нажал кнопку - но это не всегда так. Никогда не бывает более 2 строк с одинаковым идентификатором пользователя.

"userID" "time"
"0" "1526474096000"
"1" "1526474097000"
"2" "1526474098000"
"3" "1526474099000"
"4" "1526474100000"
"1" "1526474106000"
"0" "1526474107000"

Например, здесь только пользователи с ID 0 и 1 нажимали кнопку.
Я хочу рассчитать гистограмму (или какое-то другое приближение) разницы во времени, потому что слишком много пользователей, чтобы моя оперативная память могла импортировать разницу во времени для каждого пользователя.
Мой SQL-запрос выглядит так (n - некоторый размер бина гистограммы):

SELECT COUNT(*), (MAX(time)-MIN(time)/n) as time_difference 
FROM table_name  
GROUP BY userID, time_difference

Это не работает, потому что «агрегатные функции не разрешены в предложении GROUP BY».

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Просто используйте подзапрос. Я не совсем уверен, что вы пытаетесь сделать с этим '/ n', но это по крайней мере разрешает вашу синтаксическую ошибку.

SELECT time_Difference,
       count(*)
  FROM (SELECT (MAX(time)-MIN(time)/n) as time_difference 
          FROM table_name  
         GROUP 
            BY userID
       ) TMP
 GROUP
    BY time_difference;
0 голосов
/ 16 мая 2018

Вы пытаетесь это сделать?

SELECT userID, (MAX(time)-MIN(time)/n) as time_difference 
FROM table_name  
GROUP BY userID 
...