在SELECT中创建的参考自定义列

时间:2019-07-25 03:43:21

标签: sql presto

我想引用上面创建的列缩写名称,以大大简化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_StartDate_End的完整查询嵌套在DATE_DIFF内或使用另一个Join。如果这是无法完成的,则可以将问题转换为什么是最佳实践,为什么?

1 个答案:

答案 0 :(得分:1)

您可能正在看:

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部分中。