mysql选择列总和小于的位置

时间:2013-05-28 05:24:49

标签: mysql

我正在尝试从数据库表中进行选择,如下所示......

id   | task         | last_run    | interval
 1   |  test-run    |  1369715091 |  30
 2   |  anothertask |  1369715091 |  60

last_run是unix-time,由脚本在运行时更新。 间隔是需要执行此任务的运行之间的时间。

我需要做的是运行查询,我只选择last_run + interval小于当前时间的任务。

这就是我想出来的......

SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` WHERE (`next_run` > '1369717906')

...但是我收到了错误......

Unknown column 'next_run' in 'where clause'

你有什么想法吗?

4 个答案:

答案 0 :(得分:1)

您可以在那里提供这两个名称而不是Alias

SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` WHERE (`last_run`+`interval`)  > 1369717906

根据MySQL Docs

,您无法在WHERE子句中使用别名
  

可以在查询选择列表中使用别名为列提供不同的名称。您可以使用GROUP BY,ORDER BY或HAVING子句中的别名来引用该列。标准SQL不允许在WHERE子句中引用列别名。强制执行此限制是因为在评估WHERE子句时,可能尚未确定列值

答案 1 :(得分:1)

在查询中使用(last_run+interval)代替next_run

答案 2 :(得分:1)

在where子句中,使用表达式而不是别名:

WHERE last_run + interval > 1369717906

答案 3 :(得分:1)

据我所知,where条款不能使用别名

所以你有两个选择

重复where子句

中的表达式
SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` WHERE (`last_run`+`interval`) > '1369717906'

或使用可以使用别名的having

SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` HAVING (`next_run` > '1369717906')

请参阅MySQL TutorialDEMO