SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120
我得到
无效的列名daysdiff。
Maxlogtm是一个datetime字段。就是这些小事让我抓狂。
SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120
我得到
无效的列名daysdiff。
Maxlogtm是一个datetime字段。就是这些小事让我抓狂。
当前回答
对我来说,在WHERE子句中使用ALIAS的最简单方法是创建子查询并从中进行选择。
例子:
WITH Q1 AS (
SELECT LENGTH(name) AS name_length,
id,
name
FROM any_table
)
SELECT id, name, name_length FROM Q1 WHERE name_length > 0
其他回答
如果你不想在CTE中列出你所有的列,另一种方法是使用outer apply:
select
s.logcount, s.logUserID, s.maxlogtm,
a.daysdiff
from statslogsummary as s
outer apply (select datediff(day, s.maxlogtm, getdate()) as daysdiff) as a
where a.daysdiff > 120
对我来说,在WHERE子句中使用ALIAS的最简单方法是创建子查询并从中进行选择。
例子:
WITH Q1 AS (
SELECT LENGTH(name) AS name_length,
id,
name
FROM any_table
)
SELECT id, name, name_length FROM Q1 WHERE name_length > 0
如果你想在WHERE子句中使用别名,你需要将它包装在一个子选择中,或CTE:
WITH LogDateDiff AS
(
SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
)
SELECT logCount, logUserId, maxlogtm, daysdiff
FROM LogDateDiff
WHERE daysdiff > 120
HAVING适用于MySQL 根据文件:
HAVING子句被添加到SQL中,因为WHERE关键字不能 与聚合函数一起使用。
如何使用子查询(这为我在Mysql工作)?
SELECT * from (SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary) as 'your_alias'
WHERE daysdiff > 120