查询中的 Heroku dataclip 变量替换
Heroku dataclip variable substitution in query
我想在查询的顶部设置一些 parameters/variables 并在 Heroku Dataclips 的复杂查询中的几个地方使用它们。
这是一个简单的例子:
WITH vars AS ( SELECT
'2018-01-07' AS calcdate,
12345 AS salary
)
select *
from taxes
where country_alpha3='USA' and year='2018' and active=true
and subdivision_code='US-MEDI'
and local_code is null
and start_date <= DATE(vars.calcdate) and end_date >= DATE(vars.calcdate)
and lower_amount_cents <= vars.salary and upper_amount_cents >= vars.salary;
我在另一个答案(从 2013 年开始)中看到了这种代码风格,但它在今天的实际数据剪辑中不起作用。
Error: Your query couldn't be updated.
ERROR: missing FROM-clause entry for table "vars"
LINE 12: and start_date <= DATE(vars.calcdate) and end_date >= DATE(v...
^
如果 vars.calcdate
和 vars.salary
改为常量,那么 SQL 可以正常工作。我认为这与 vars.
语法或用法有关。
我找到了解决方案。这是我认为的语法。 vars.name 的格式是不允许的(不确定我在哪里看到的)。
WITH vars AS ( SELECT
DATE('2018-01-07') AS calcdate,
12345 AS salary
)
select *
from taxes
where country_alpha3='USA' and year='2018' and active=true
and subdivision_code='US-MEDI'
and local_code is null
and start_date <= (SELECT calcdate from vars) and end_date >= (SELECT calcdate from vars)
and lower_amount_cents <= (SELECT salary from vars) and upper_amount_cents >= (SELECT salary from vars);
我想在查询的顶部设置一些 parameters/variables 并在 Heroku Dataclips 的复杂查询中的几个地方使用它们。 这是一个简单的例子:
WITH vars AS ( SELECT
'2018-01-07' AS calcdate,
12345 AS salary
)
select *
from taxes
where country_alpha3='USA' and year='2018' and active=true
and subdivision_code='US-MEDI'
and local_code is null
and start_date <= DATE(vars.calcdate) and end_date >= DATE(vars.calcdate)
and lower_amount_cents <= vars.salary and upper_amount_cents >= vars.salary;
我在另一个答案(从 2013 年开始)中看到了这种代码风格,但它在今天的实际数据剪辑中不起作用。
Error: Your query couldn't be updated.
ERROR: missing FROM-clause entry for table "vars"
LINE 12: and start_date <= DATE(vars.calcdate) and end_date >= DATE(v...
^
如果 vars.calcdate
和 vars.salary
改为常量,那么 SQL 可以正常工作。我认为这与 vars.
语法或用法有关。
我找到了解决方案。这是我认为的语法。 vars.name 的格式是不允许的(不确定我在哪里看到的)。
WITH vars AS ( SELECT
DATE('2018-01-07') AS calcdate,
12345 AS salary
)
select *
from taxes
where country_alpha3='USA' and year='2018' and active=true
and subdivision_code='US-MEDI'
and local_code is null
and start_date <= (SELECT calcdate from vars) and end_date >= (SELECT calcdate from vars)
and lower_amount_cents <= (SELECT salary from vars) and upper_amount_cents >= (SELECT salary from vars);