2016-12-10 3 views
3

В красных смещениях, у меня есть запросВЫБРАТЬ интервал, где число интервала из таблицы (красное смещение)

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

Interval всегда буквальным.
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 
); 
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 
); 
Смежные вопросы