在redshift中,我有查询
CREATE TABLE result_table AS(
SELECT * FROM table_name
WHERE issued_timestamp >= date_part(epoch, trunc(getdate())- interval '2 days' + interval '17 hours')*1000
AND issued_timestamp < date_part(epoch, trunc(getdate())- interval '0 days' + interval '17 hours')*1000
);
我可以从另一张桌子中选择间隔数量吗?
例如,我有一个表day_interval
day_since|day_until
21|5
所以我可以像这样查询
CREATE TABLE result_table AS(
SELECT * FROM table_name
WHERE issued_timestamp >= date_part(epoch, trunc(getdate())- interval '2 days' + interval '17 hours')*1000
AND issued_timestamp < date_part(epoch, trunc(getdate())- interval '5 days' + interval '17 hours')*1000
);
我试过
CREATE TABLE result_table AS(
SELECT * FROM table_name
WHERE issued_timestamp >= date_part(epoch, trunc(getdate())- interval (SELECT day_since FROM "day_interval")' days' + interval '17 hours')*1000
AND issued_timestamp < date_part(epoch, trunc(getdate())- interval '0 days' + interval '17 hours')*1000
);
但没有用。
提前致谢
答案 0 :(得分:2)
间隔始终是文字
interval 'x' days
或interval x days
无效,但 -
x * interval '1' days
会。
CREATE TABLE result_table AS(
SELECT * FROM table_name
WHERE issued_timestamp >= date_part(epoch, trunc(getdate()) - (SELECT day_since FROM "day_interval") * interval '1 days' + interval '17 hours')*1000
AND issued_timestamp < date_part(epoch, trunc(getdate())- interval '0 days' + interval '17 hours')*1000
);
答案 1 :(得分:0)
如果我理解正确,您只需要JOIN
:
CREATE TABLE result_table AS
SELECT t.*
FROM table_name t JOIN
day_interval di
ON t.issued_timestamp >= date_part(epoch, trunc(getdate()) - di.day_since * interval '2 days' + interval '17 hours') * 1000 AND
t.issued_timestamp < date_part(epoch, trunc(getdate()) - di.day_until * interval '0 days' + interval '17 hours') * 1000
);