SELECT logcount, logUserID, maxlogtm
   , DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120

我明白了

"无效列名daysdiff".

Maxlogtm是一个日期时间字段.正是这些小事让我发疯.

推荐答案

SELECT
   logcount, logUserID, maxlogtm,
   DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE ( DATEDIFF(day, maxlogtm, GETDATE() > 120)

通常情况下,在WHERE子句中不能引用字段别名.(将其视为整个SELECT(包括别名)应用于WHERE子句之后.)

但是,正如其他答案中提到的,可以强制SQL在WHERE子句之前处理SELECT.通常使用括号强制执行逻辑操作顺序,或使用公共表表达式(CTE):

括号/子选择:

SELECT
   *
FROM
(
   SELECT
      logcount, logUserID, maxlogtm,
      DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
   FROM statslogsummary   
) as innerTable
WHERE daysdiff > 120

或者看看亚当的答案,看看CTE版本的答案.

Sql相关问答推荐

任何查询的数组列的 Postgres 索引类型

SQL Query 根据另一列的值查找唯一列值

使用 SQL Server 将列转换为多行

在 SQL 中搜索 WHERE 值为 SELECT,为什么现在可以工作?

js数量限制

如何找出具有多个条件的相同值并将同一列的值放在不同的列中?

SQL - 标记行直到每组的0值

如何快速判断表是否超过 N 行?

SQL求最大值

如何在此 SQL 查询中使用 WHERE 子句?

为什么 query_to_xml 在 Postgres 中为易失性查询返回错误?

BQ - 从不连接的结构数组中获取字段

为什么这个转换为 DATETIME2?

SQL:从多列的值中拆分行

获取 SQL Server 2018 中的第 3 大时间值

SQL:从时间戳日期中减去 1 天

何时可以在 SQL 表中保存 JSON 或 XML 数据

创建或替换触发器 postgres

如何在 Oracle Sql developer 中查看解释计划?

如何跳过sql查询中的前n行