2016-03-14 2 views
1

Я использую этот запрос MySQL для добавления записей трафика в 15минутных группировках.MySQL Grouping Datetime при использовании SUM

SELECT SUM(bytes), ROUND(UNIX_TIMESTAMP(timestamp_end)/(15 * 60)) AS timekey 
     FROM acct_v9 
    GROUP BY timekey 

Моя колонка «timestamp_end» хранится как DateTime, однако, когда я пытаюсь преобразовать этот запрос обратно в DateTime, используя FROM_UNIXTIME я получаю даты в 1970 году

ответ

1

При разделении и круглую метку времени, вы не получите действительную метку времени. Вы должны повторно умножить его на (15 * 60):

SELECT COUNT(*), 
      SUM(bytes), 
      ROUND(UNIX_TIMESTAMP(timestamp_end)/(15 * 60))*(15*60) AS timekey 
     FROM acct_v9 
    GROUP BY timekey 

По этому запросу вы получите действительные временные метки.

Для получения непосредственно отформатированную дату, вы можете использовать этот запрос:

SELECT COUNT(*), 
      SUM(bytes), 
      FROM_UNIXTIME 
      (
      ROUND(UNIX_TIMESTAMP(timestamp_end)/(15 * 60))*(15*60) 
      ,'%Y-%m-%d %H:%i:%s' 
     ) AS timekey 
    FROM acct_v9 
GROUP BY timekey 

sqlFiddle demo

Очевидно, что вы можете изменить %Y-%m-%d %H:%i:%s с нужным форматом.

+0

Спасибо, это получило результаты, которые я искал. Я все еще пытаюсь склонить голову к необходимости дополнительного шага умножения? – Robert

1
SELECT SUM(bytes),DATE_FORMAT(FROM_UNIXTIME(timestamp_end), '%e %b %Y') AS timekey 
    FROM acct_v9 GROUP BY DATE_FORMAT(FROM_UNIXTIME(timestamp_end), '%e %b %Y') 
+0

Разве 'FROM_UNIXTIME' не предназначен для преобразования метки времени в дату? Мой столбец «timestamp_end» вставляется в БД, уже используя FROM_UNIXTIME. Затем функция ROUND преобразует ее обратно в метку времени, чтобы выполнить математику. Я пытаюсь вернуть его в формат числовой даты, который был вставлен в БД. – Robert

+0

Я просто его отредактировал и протестировал на http://sqlfiddle.com/#!9/75519/2 –

Смежные вопросы