对联接mySQL进行排序和索引

时间:2019-01-03 09:46:47

标签: mysql sql

我有一个名为“ MI_APR”的表。我正在使用LEFT JOIN从“日历”表中引入数据。正在传输的数据是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`

加入后,我需要一些帮助来对ASC中的“ FIRST_DATE”列进行排序,这是格式为YYYY-MM-DD的简单日期列。 然后,我需要添加一个名为INDEX的新列,该列基于MI_APR表中该DATES列中的月号,最早的月份的值从0开始,向上计数。该指数甚至将持续多年向上攀升。参见下面的示例:

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

谢谢

1 个答案:

答案 0 :(得分:2)

您可以通过以下查询即时计算索引:

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子句。