首页 > 解决方案 > 引用在 SELECT 中创建的自定义列

问题描述

我想引用上面创建的列简写名称,以大大简化DATE_DIFF一行以提高可读性,但不确定是否允许这样做。


下面的代码可能吗?请注意,对 的输入DATE_DIFF是在前两行中启动的。

SELECT DISTINCT
    Stuff ,
    DATE_FORMAT(FROM_UNIXTIME(date1), '%Y-%d-%m') as Date_Start ,
    DATE_FORMAT(FROM_UNIXTIME(date2), '%Y-%d-%m') as Date_End  ,
    DATE_DIFF( 'day' , Date_Start , Date_End) + 1 as Date_Delta ,    `<-- HERE
    More_Stuff 
FROM T1
LEFT JOIN T2
    ON Stuff = More_Stuff
LEFT JOIN T3
    ON More_Stuff = Other_Stuff

我希望避免将Date_Start&的完整查询嵌套Date_EndDATE_DIFF或使用另一个Join. 如果这是无法完成的事情,那么问题可以转换为这样的事情的最佳实践是什么,为什么?

标签: sqlpresto

解决方案


您要么正在查看:

SELECT
    Stuff
    , Date_Start
    , Date_End
    , DATE_DIFF( 'day' , Date_Start , Date_End) + 1 as Date_Delta
    , More_Stuff
FROM
    (
        SELECT DISTINCT
            Stuff ,
            DATE_FORMAT(FROM_UNIXTIME(date1), '%Y-%d-%m') as Date_Start ,
            DATE_FORMAT(FROM_UNIXTIME(date2), '%Y-%d-%m') as Date_End  ,
            DATE_DIFF( 'day' , Date_Start , Date_End) + 1 as Date_Delta ,
            More_Stuff 
        FROM T1
        LEFT JOIN T2
            ON Stuff = More_Stuff
        LEFT JOIN T3
            ON More_Stuff = Other_Stuff
    ) as Q

或者:

SELECT DISTINCT
    Stuff ,
    DATE_FORMAT(FROM_UNIXTIME(date1), '%Y-%d-%m') as Date_Start ,
    DATE_FORMAT(FROM_UNIXTIME(date2), '%Y-%d-%m') as Date_End  ,
    DATE_DIFF( 'day' , DATE_FORMAT(FROM_UNIXTIME(date1), '%Y-%d-%m') , DATE_FORMAT(FROM_UNIXTIME(date2), '%Y-%d-%m')) + 1 as Date_Delta ,
    More_Stuff 
FROM T1
LEFT JOIN T2
    ON Stuff = More_Stuff
LEFT JOIN T3
    ON More_Stuff = Other_Stuff

要在部件中使用字段SELECT,它必须存在于FROM部件中。


推荐阅读