我有一个名为“ 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
谢谢
答案 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
子句。