【问题标题】:SELECT interval where the number of interval is from table (redshift)选择间隔,其中间隔数来自表(红移)
【发布时间】:2016-12-10 16:25:36
【问题描述】:

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

但没用。

提前致谢

【问题讨论】:

    标签: sql amazon-redshift


    【解决方案1】:

    间隔始终是文字。
    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
    );
    

    【讨论】:

      【解决方案2】:

      如果我理解正确,您只需要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
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多