2016-10-13 9 views
0

Database Flavor: PostgreSQL 9.5Выберите даты из таблицы на основе диапазона дат другой таблицы

Я пытаюсь получить мою голову вокруг получения даты в table1, которые находятся в диапазоне дат дат т.е. debtors.debt_date поля между (-3 и + 4 дней с указанной даты в debtors.debt_date поле)

запроса 1 дает мне:

ERROR: more than one row returned by a subquery used as an expression (which is no surprise)

select table1.sale_date 
from sales table1 where 
table1.sale_date between 
    (select debt_date::date -3 from debtors) 
and (select debt_date::date +4 from debtors); 

Запрос 2 возвращает ни одной строки (и я подумайте, где начальное, где статья ищет абсолютные значения)

select table1.sale_date 
from sales table1 where 
table1.sale_date in ( 
    (select debt_date::date from debtors where debt_date between 
    debt_date::date - 3 and debt_date::date + 4); 
+0

Несвязанный, но: какой тип данных является 'debt_date'? почему вы бросаете это на свидание? –

+0

@a_horse_with_no_name тип debt_date - это временная метка без часового пояса, и то, что я пытаюсь сделать, это вычесть 3 и добавить 4 дня от debtors.date_paid, так как меня интересуют даты из таблиц продаж, которые попадают в этот диапазон в таблице должников. – ribbit

+0

Вероятно: '... from sales s join debtors d on (s.sale_date между d.debt_date - '3 day' :: interval и d.debt_date + '4 day' :: interval)'. К сожалению, это не так ясно, об именах таблиц/столбцов ... – Abelisto

ответ

0

Это то, что вы пытаетесь сделать?

select table1.sale_date 
from sales table1 
where table1.sale_date between debt_date::date -3 AND debt_date::date +4 
+0

Спасибо, но это больше похоже на 'выбрать table1.sale_date от продаж table1 где table1.sale_date между debtors.debt_date :: date -3 И debtors.debt_date :: date + 4' – ribbit

+0

Я не понимаю, debt_date :: date - это столбец или параметр? – sagi

+0

'select debt_date от лимита должников 1; (временная метка без часового пояса без литья) debt_date --------------------- 2013-05-13 00:00:00 pgdb = # select debt_date :: дата с лимита должников 1; (Cast только даты, я не заинтересован в то время) debt_date ------------ 2013-05-13 (1 ряд) pgdb = # выберите debt_date :: дата + 4 от лимита должников 1; (Дать даты и добавить/вычесть для моих целей) ? Column? ------------ 2013-05-17 (1 строка) ' – ribbit

Смежные вопросы