Упорядочить по и индексировать на соединение MySQL - PullRequest
0 голосов
/ 03 января 2019

У меня есть таблица с именем "MI_APR". Я ввожу данные из таблицы «календарь», используя левое соединение. Эти передаваемые данные являются столбцом DATES с именем столбца «First_Date».

ALTER TABLE MI_APR
    ADD COLUMN `Profile` CHAR(8) NOT NULL DEFAULT 'MI',
    ADD COLUMN First_Date DATE,
    CHANGE `Location Label` `Label`TINYTEXT;

    UPDATE MI_APR LEFT JOIN calendar on MI_APR.`Period` = calendar.`Unique_Period`
    SET
    MI_APR.`First_Date` = calendar.`First_Date`

После того, как соединение произошло, мне нужна помощь в сортировке столбца «FIRST_DATE» в ASC, который является простым столбцом даты в формате YYYY-MM-DD. Затем мне нужно добавить новый столбец с именем INDEX, который имеет значения, начиная с 0 для самого раннего месяца, начиная с номера месяца в столбце DATES в таблице MI_APR. Индекс будет продолжать расти даже по годам. Смотрите пример ниже:

EXPECTED OUTPUT
    FIRST_DATE    INDEX
    2018/10/01    0
    2018/11/01    1
    2018/12/01    2
    2019/01/01    3

Спасибо

1 Ответ

0 голосов
/ 03 января 2019

Вы можете рассчитать индекс на лету с помощью этого запроса:

SELECT First_Date, TIMESTAMPDIFF(MONTH, earliest_date, First_Date) AS Index
FROM MI_APR
, (SELECT First_Date AS earliest_date FROM MI_APR ORDER BY First_Date ASC LIMIT 1) fancy_alias;

Если результат вас порадует, вы можете преобразовать его в обновление. Однако я советую вам не хранить данные, которые можно легко вычислить на лету!

UPDATE MI_APR
, (SELECT First_Date AS earliest_date FROM MI_APR ORDER BY First_Date ASC LIMIT 1) fancy_alias
SET `Index` = TIMESTAMPDIFF(MONTH, earliest_date, First_Date);

Относительно вашего комментария "Также я хотел бы, чтобы таблица была отсортирована, а затем обновлена". В таблице нет порядка, на который можно положиться. Если вы хотите, чтобы результат сортировки был выбран, используйте предложение ORDER BY.

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