FitTech
@FitTech

Как получить список дат?

Есть таблица:
id date score
1 2017-02-01 10
2 2017-02-05 6
3 2017-02-05 7
4 2017-02-07 4

Мне нужно получить данные в виде:
1 2017-02-01 10
2 2017-02-02 0
3 2017-02-03 0
4 2017-02-04 0
5 2017-02-05 12
6 2017-02-06 0
7 2017-02-07 4
Те данные которые есть, нужно сгруппировать по дате и score, а дат которых нету в промежутке, нужно добавить и вставить ноли.
Как это можно сделать в MySQL?
Как вариант, думал получать данные те что есть, в пхп создавать массив с датами и нулями, а потом мерджить два массива.
  • Вопрос задан
  • 316 просмотров
Решения вопроса 1
longclaps
@longclaps
CREATE TABLE Data (d DATE, i INT);
INSERT INTO Data VALUES ('2017-02-01', 10), ('2017-02-05', 6),
                        ('2017-02-05',  7), ('2017-02-07', 4);

DELIMITER $$
CREATE PROCEDURE all_those_days(IN start DATE, IN stop DATE)
  BEGIN
    DROP TEMPORARY TABLE IF EXISTS series;
    CREATE TEMPORARY TABLE series (d DATE PRIMARY KEY) ENGINE = MEMORY;
    WHILE start < stop DO
      INSERT INTO series VALUE (start);
      SELECT DATE_ADD(start, INTERVAL +1 DAY) INTO start;
    END WHILE;
    SELECT series.d, COALESCE(SUM(Data.i), 0) AS i
    FROM series LEFT JOIN Data ON series.d = Data.d GROUP BY series.d;
  END $$
DELIMITER ;

CALL all_those_days('2017-02-01', '2017-02-10');
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы