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