Reputation: 853
In redshift, I have query
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
);
Can I select where the number of interval is from another table?
For example I have a table day_interval
day_since|day_until
21|5
So I can query like this
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
);
I tried
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
);
but didn't work.
Thanks in advance
Upvotes: 3
Views: 714
Reputation: 1269503
If I understand correctly, you just want a 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
);
Upvotes: 0
Reputation: 44921
Interval is always a literal.
interval 'x' days
or interval x days
won't work, but -
x * interval '1' days
will.
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
);
Upvotes: 3