2016-04-05 1 views
0

У меня эти данные в mysql.Оптимизация данных с использованием MySQL-запроса или javascript

| code | date    | value | 
| A | 2016-04-04 00:00:00 | 0.1 | 
| B | 2016-04-04 00:00:02 | 0.5 | 
| C | 2016-04-04 00:00:05 | 1  | 
| A | 2016-04-04 00:11:00 | 0.2 | 
| B | 2016-04-04 00:12:25 | 0.6 | 
| C | 2016-04-04 00:15:30 | 0.4 | 

и я хочу настроить и отправить данные в формате JSON с использованием nodejs/expressjs с ежедневно, ежемесячно, ежегодно сумма.

Сначала я пробую этот запрос.

SELECT date, value FROM 'table' 
WHERE code = 'A' 
    AND date >= '2016-04-05 00:00:00' 
GROUP BY DATE_FORMAT(date, "%y-%m-%d-%H") // or "%y-%m-%d", "%y-%m" 
ORDER BY date; 

этот запрос работает хорошо. но это расточительно, я думаю. потому что многократно запрашивает количество кодов.

Выход:

+---------------------+-------+ 
|   date  | value | 
+---------------------+-------+ 
| 2016-04-05 00:01:56 | 0 | 
| 2016-04-05 01:01:56 | 0 | 
| 2016-04-05 02:01:58 | 0 | 
| 2016-04-05 03:01:57 | 0 | 
| 2016-04-05 04:01:58 | 0 | 
| 2016-04-05 05:01:58 | 0 | 
| 2016-04-05 06:01:59 | 0 | 
| 2016-04-05 07:01:58 | 0 | 
| 2016-04-05 08:01:58 | 0 | 
| 2016-04-05 09:01:59 | 0 | 
| 2016-04-05 10:01:59 | 0.009 | 
| 2016-04-05 11:02:00 | 0.007 | 
+---------------------+-------+ 

Могу ли я получить все данные с одного запроса?

Наконец, я хочу отправить эту форму данных с помощью expressjs.

[ 
    A: [{ date: '2016-04-04 00:00:00', sum: 4}, 
     { date: '2016-04-04 00:01:00', sum: 6}], 

    B: [{ date: '2016-04-04 00:00:00', sum: 4}, 
     { date: '2016-04-04 00:01:00', sum: 6}] 
] 

или эта форма

[ 
    { date: '2016-04-04 00:00:00', A: 4, B: 4 }, 
    { date: '2016-04-04 00:01:00', A: 4, B: 4 } 
] 

я попробовать MySQL запросов, sequelize, lodash. , но я не могу найти правильный путь.

+0

Что является результатом 'query'? – Rayon

+0

@RayonDabre результат '+ --------------------- + ------- + | дата | стоимость | + --------------------- + ------- + | 2016-04-05 00:01:56 | 0 | | 2016-04-05 01:01:56 | 0 | | 2016-04-05 02:01:58 | 0 | | 2016-04-05 03:01:57 | 0 | | 2016-04-05 04:01:58 | 0 | | 2016-04-05 05:01:58 | 0 | | 2016-04-05 06:01:59 | 0 | | 2016-04-05 07:01:58 | 0 | | 2016-04-05 08:01:58 | 0 | | 2016-04-05 09:01:59 | 0 | | 2016-04-05 10:01:59 | 0,009 | | 2016-04-05 11:02:00 | 0,007 | + --------------------- + ------- + ' – whitehander

ответ

0

Вы можете использовать подзапрос, чтобы форматировать дату, чтобы вы могли сгруппировать ее. Пример с ежедневными суммами:

SELECT code, date, sum(value) as value 
FROM (select code, DATE_FORMAT(date, "%y-%m-%d") as date, value from t1) as t2 
GROUP BY code, date 
ORDER BY date 

Результат:

"A";"16-04-04";"0.30000000447034836" 
"B";"16-04-04";"1.100000023841858" 
"C";"16-04-04";"1.4000000059604645" 
+0

спасибо !! Это точный ответ на мое намерение! – whitehander