Как сделать расчет на предыдущую дату с указанной датой в mysql - PullRequest
0 голосов
/ 09 апреля 2020

Я успешно вычислил ранг каждого столбца с помощью оконной функции.

я пытаюсь вычесть ранг из предыдущей даты; запись как показано ниже

enter image description here

Я пытаюсь получить такой вывод

enter image description here

CREATE TABLE `test_a` (
  `date` date DEFAULT NULL,
  `id` int DEFAULT NULL,
  `x` decimal(39,4) DEFAULT NULL,
  `x_RANK` bigint unsigned NOT NULL DEFAULT '0',
  `y` decimal(39,4) DEFAULT NULL,
  `y_rank` bigint unsigned NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/ * Данные для таблицы test_a * /

insert  into `test_a`(`date`,`id`,`x`,`x_RANK`,`y`,`y_rank``) values 
('2020-03-30',107,0.6477,2,0.8087,1),
('2020-03-30',112,99,4,8.9137,4),
('2020-03-30',110,0.0983,1,3.3885,3),
('2020-03-30',102,2.4444,3,2.7200,2),
('2020-03-31',112,0.2292,2,8.8220,4),
('2020-03-31',107,0.7146,3,0.8755,1),
('2020-03-31',110,0.1680,1,3.7388,3),
('2020-03-31',102,2.7215,4,3.3320,2);

1 Ответ

0 голосов
/ 10 апреля 2020
SELECT `date`,
       `id`,
       `x`,
       `x_RANK`,
       `x_RANK` - COALESCE(LAG(`x_RANK`) OVER (PARTITION BY `id` ORDER BY `date`), 0) diff_rank_x,
       `y`,
       `y_rank`,
       `y_RANK` - COALESCE(LAG(`y_RANK`) OVER (PARTITION BY `id` ORDER BY `date`), 0) diff_rank_y
FROM test_a
ORDER BY `id`, `date`;

fiddle

Вы можете добавить условие, которое удаляет «первые» строки для id из вывода (например, убедитесь, что ни один LAG() не равен нулю ).

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