SELECT间隔,其中间隔数来自表(redshift)

时间:2016-12-10 16:25:37

标签: sql amazon-redshift

在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
);

但没有用。

提前致谢

2 个答案:

答案 0 :(得分:2)

间隔始终是文字 interval 'x' daysinterval 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
);