我很确定之前已经有人问过这个问题,但是我正在努力为包含如下数据的表获取正确的语法
id date type report item_id 1 2018-11-07 Ver枚ffentlichung des 9-Monats-Berichtes TRUE 16 2 2018-11-06 Ver枚ffentlichung des 9-Monats-Berichtes TRUE 17 3 2019-03-07 Ver枚ffentlichung des Jahresberichtes TRUE 17 4 2019-05-10 Bericht zum 1. Quartal TRUE 17
我正在尝试制定的查询是
SELECT date, AGE(now(), date) as t1 FROM dates WHERE t1 > 0
意味着我只在寻找过去的价值观。 但是,我得到一个错误
错误:列“ t1”不存在
(当然,这是一个别名)。Postgresql在这里不支持别名吗?
您不能在WHERE条件中引用别名,因为在逻辑上WHERE先执行SELECT。
WHERE
SELECT
您可以使用子查询:
SELECT * FROM (SELECT date, AGE(now(), date) as t1 FROM dates) sub WHERE sub.t1 > interval '0::seconds';
或LATERAL(我最喜欢的方式):
LATERAL
SELECT date, s.t1 FROM dates ,LATERAL (SELECT AGE(now(), date) as t1) AS s WHERE s.t1 > interval '0::seconds';
或重复表达(违反DRY原理):
SELECT date, AGE(now(), date) as t1 FROM dates WHERE AGE(now(), date) > interval '0::seconds';
至于计算,AGE您实际上并不需要它,因为您可以将其重写为date > now()。
AGE
date > now()
相关文章:
MySQL-搜索自定义列
为什么“ inq to sql”查询与常规SQL查询不同,以FROM关键字开头?