Как сделать планировщик со счетчиком в MySQL? - PullRequest
0 голосов
/ 09 февраля 2019

В моей базе данных MySQL у меня есть таблица с именем TABLE_MAIN.Мне нужно добавлять новые данные в эту таблицу из других таблиц каждый час.В моем случае это TABLE_A и TABLE_B.Мне нужно запускать оператор SQL ниже каждый час.В то же время мне нужно устанавливать новые значения для A.TIME_KEY и B.MONTH_KEY каждый час.

Например, через час значение для A.TIME_KEY должно быть 2018-01-05 01:00:00.В то же время B.MONTH_KEY имеет то же значение 2018-01-01.Значение для B.MONTH_KEY изменяется только тогда, когда будет в следующем месяце.Например 2018-02-01.

Как мне сделать такой планировщик со счетчиком в MySQL?

SQL :

INSERT INTO TABLE_MAIN (
  ID,
  TIME_KEY,
  STATUS,
  OBJECT_NAME,
  OBJECT_DESCRIPTION
) VALUES (
  SELECT
    A.ID
    A.TIME_KEY
    A.STATUS
    B.OBJECT_NAME
    B.OBJECT_DESCRIPTION
  FROM 
    TABLE_A AS A
  INNER JOIN 
    TABLE_B AS B
  ON 
    A.ID = B.ID_OBJECT
  WHERE 
    A.TIME_KEY="2018-01-05 00:00:00"
  AND
    B.MONTH_KEY="2018-01-01"
);

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Вы можете использовать DATE_FORMAT() и установить для последних частей DATE или DATETIME постоянные значения:

WHERE 
    A.TIME_KEY  = DATE_FORMAT(NOW(), '%Y-%m-%d %H-00-00')
  AND
    B.MONTH_KEY = DATE_FORMAT(NOW(), '%Y-%m-01')

Если данные «отстают на два часа», просто замените NOW() с NOW() - INTERVAL 2 HOUR

WHERE 
    A.TIME_KEY  = DATE_FORMAT(NOW() - INTERVAL 2 HOUR, '%Y-%m-%d %H-00-00')
  AND
    B.MONTH_KEY = DATE_FORMAT(NOW() - INTERVAL 2 HOUR, '%Y-%m-01')
0 голосов
/ 09 февраля 2019

Вы можете сделать это следующим образом:

Сначала необходимо создать правильный запрос на вставку, а затем поместить его в планировщик событий.

Включите планировщик:

SET GLOBAL event_scheduler = ON;


CREATE 
    EVENT `Event_Name` 
    ON SCHEDULE EVERY 1 HOUR STARTS '2019-02-10 00:00:00' 
    DO BEGIN

    INSERT INTO TABLE_MAIN (
  ID,
  TIME_KEY,
  STATUS,
  OBJECT_NAME,
  OBJECT_DESCRIPTION
) 
      SELECT
    A.ID
    A.TIME_KEY
    A.STATUS
    B.OBJECT_NAME
    B.OBJECT_DESCRIPTION
  FROM 
    TABLE_A AS A
  INNER JOIN 
    TABLE_B AS B
  ON 
    A.ID = B.ID_OBJECT
  WHERE
      CASE WHEN DAY(B.MONTH_KEY) = 1
           THEN  month(B.MONTH_KEY) = month(NOW() - INTERVAL 1 DAY)
           ELSE   month(B.MONTH_KEY) = month(NOW())
      END
     AND
     CASE WHEN HOUR(A.TIME_KEY) < 2
          THEN Date(A.TIME_KEY) = Date(NOW() - INTERVAL 1 DAY) AND hour(A.TIME_KEY) = hour(NOW() - INTERVAL 2 HOUR)
          ELSE Date(A.TIME_KEY) = Date(NOW()) and hour(A.TIME_KEY) = hour(NOW()- INTERVAL 2 HOUR)
     END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...