MySQL, как разбить дату на известные интервалы и преобразовать ее в строки? - PullRequest
0 голосов
/ 12 июня 2018

Как разделить выбранное значение даты на множество строк, например, с известным интервалом до сих пор?Я мог бы сделать это, используя Recursive CTE, но MySql Aurora (RDS) не дает поддержки.

например: получение одного результата, например

|--|----------|
|id|createdAt |
|--|----------|
|1 |2018-01-01|
|--|----------|

При заданном интервале в 7 дней запросдолжен выводить данные как:

|----------|
|clycles   |
|----------|
|2018-01-01|
|2018-01-08|
|2018-01-15|
|2018-01-22|
|...       |
|----------|

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Если у вас есть (возможно временная) таблица всех возможных дат в столбце d, вы можете

SELECT whatever, d FROM somewhere 
JOIN dates 
WHERE d BETWEEN createdAt AND CURRENT_DATE() 
AND MOD(DATEDIFF(d, createdAt),7)=0

См. Также Как заполнить таблицу диапазоном дат?

0 голосов
/ 12 июня 2018

Я бы использовал временную таблицу для этого

DELIMITER //
CREATE PROCEDURE `increment_date_till_now`(
    IN `date_start` DATE,
    IN `day_interval` INT
)
BEGIN
  CREATE TEMPORARY TABLE `__increment_days` (`date` DATE NOT NULL);
  SET @dt = date_start;
  INSERT INTO `__increment_days` VALUES (@dt);
  WHILE (@dt := @dt + INTERVAL day_interval DAY) < CURRENT_DATE() DO
    INSERT INTO `__increment_days` VALUES (@dt);
  END WHILE;
  SELECT * FROM `__increment_days`;
  DROP TABLE `__increment_days`;
END//

А потом

CALL increment_date_till_now('2018-01-01', 7);
...