sql - 引用在 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_End
在DATE_DIFF
或使用另一个Join
. 如果这是无法完成的事情,那么问题可以转换为这样的事情的最佳实践是什么,为什么?
解决方案
您要么正在查看:
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
部件中。
推荐阅读
- django - 如何为两因素身份验证配置 Django Authy
- sql - SQL 将范围拆分为单行
- java - 使用改造和可观察解析 REST 响应消息
- c - 为什么我的程序在 C 中不打印真实结果
- c# - C# 如何使用 Caliburn.Micro 将 WPF GeometryModel3D 绑定到 ViewModel
- sql - 蜂巢确定具有重叠日期的记录
- python - Python 转换为 .exe(通过 Pyinstaller)不起作用
- java - 需要审查:ConcurrentmodificationException 而 ReentrantLock 确保这是不可能的
- logging - Grok 解析方括号内的数据
- bash - VSCode 中的 GIT bash 中的错误