2017-01-25 3 views
1

В настоящее время моя таблица db имеет dailTotal значения за каждый день, мне нужно, чтобы они были сгруппированы в недельные итоги.Сумма ежедневных сумм Mysql Sum в еженедельные итоговые данные за данный диапазон дат

Можно ли добавлять ежедневные итоговые суммы до недельных итогов и отображать каждую неделю каждую единицу между заданным диапазоном дат.

Im не совсем уверен, с чего начать с этого. Мой текущий запрос к получению составляет день:

SELECT dailyTotal 
FROM energyUsage 
WHERE meterIdentifier = '1300011505120' 
     AND startTime >= '2017-01-01 00:00:00' 
     AND startTime <= '2017-12-31 00:00:00'; 

ответ

1

Недели могут быть немного неоднозначными. Одно удобное определение - это встроенное определение. Таким образом, вы можете делать то, что вы хотите использовать yearweek():

SELECT YEAREWEEK(startTime) as yyyyww, SUM(dailyTotal) 
FROM energyUsage 
WHERE meterIdentifier = '1300011505120' AND 
     startTime >= '2017-01-01' AND 
     startTime <= '2017-12-31' 
GROUP BY yyyyww 
ORDER BY yyyyww; 

Вы можете проверить mode аргумент для управления начать ли недели в воскресенье или в понедельник, и когда первая неделя год. Не существует режима, который гласит: «первая неделя года начинается 1 января», хотя вы можете поставить логику для этой цели.

Примечание: Если startTime имеет компонент времени, я предполагаю, что вы хотите:

WHERE meterIdentifier = '1300011505120' AND 
     startTime >= '2017-01-01' AND 
     startTime < '2018-01-01' -- note the inequality 
+0

Если нет правила за год, чтобы начать с 1 Jan, что он, используя в запросе? Как это то, что я хочу – user794846

+0

@ user794846. , , Читайте о аргументе 'mode'. , , https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_week. –

0

Это следует сделать это:

SELECT SUM(dailyTotal) AS weeklyTotal 
FROM energyUsage 
WHERE meterIdentifier = '1300011505120' 
     AND startTime >= '2017-01-01 00:00:00' 
     AND startTime <= '2017-12-31 00:00:00' 
GROUP BY YEAR(startTime),WEEK(startTime); 
+0

Этот, похоже, не работает: Неизвестный столбец «weeklyTotal» в «списке полей» – user794846

+0

извините за использование синтаксиса tsql. он должен работать сейчас –

0

Вы можете использовать агрегатную функцию:

SELECT dailyTotal, 
     sum(dailyTotal) over (partition by EXTRACT(MONTH FROM StartTime)) as MonTotal 
FROM energyUsage 
WHERE meterIdentifier = '1300011505120' 
     AND startTime >= '2017-01-01 00:00:00' 
     AND startTime <= '2017-12-31 00:00:00'; 

Я принимаю здесь много всего, но у вас есть идея.

1- версия MySQL поддерживает агрегированные функции

2- Ваше поле имеет дату типа

+0

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса для использования рядом с ним (раздел EXTRACT (MONTH FROM StartTime)) в виде MonTotal FROM energyUsage WHER 'в строке 2 – user794846

+0

какая версия mysql разрешает переразделение? – McNets

+0

$ mysql --version mysql Ver 15.1 Распространение 5.5.50-MariaDB для Linux (x86_64) с использованием readline 5.1 –