2015-07-27 2 views
1

У меня есть таблица sql с двумя столбцами. Один столбец называется dateUpdated, а другой называется dateReported. Я хочу создать третий столбец, который содержит целое значение рабочих дней между dateUpdated и dateReported для каждой строки. dateUpdated будет ВСЕГДА быть датой после или по значению dateReported. Например, таблица может выглядеть так:SQL-запрос получает рабочие дни из двух столбцов даты

DATE UPDATED Date Reported 
2015-06-23  2015-06-02 
2015-06-05  2015-06-04 
2015-06-23  2015-06-15 
2015-06-17  2015-06-04 
2015-06-23  2015-06-27 
2015-06-23  2015-06-04 
2015-06-08  2015-06-04 

В третьей колонке должно быть количество рабочих дней между двумя столбцами для каждой строки. Мой текущий SQL выглядит следующим образом

select date(time_of_update) as updated, 
rep.date_reported as dateReported 
from history hist left join reports rep 
on hist.name = rep.name 
left join calendar cal 
on rep.date_reported = cal.calendar_date; 

Мой календарь таблица содержит столбец всех дат, а также адъюнкт-столбец, который отмечает, если они рабочие дни. Например, я мог бы запускать что-то вроде

select sum(is_business_day) from calendar where 
calendar_date between '2015-06-02' and '2015-06-23'; 

и я получаю 16 дней. Мне было интересно, как я могу объединить эти два, чтобы получить две вышеупомянутые колонки, а также третью.

Подзапрос допустим, если это единственный способ сделать это. Благодаря!

ответ

1

Если dt_tbl ваш стол с DateUpdated и dateReported и calendar ваша таблица календарных дат, а затем сделать это:

select 
a.dateUpdated 
, a.dateReported 
, sum(is_business_day) num_business_days 
from 
dt_tbl a 
left join 
calendar c on c.calendar_date between a.dateReported and a.dateUpdated 
group by 
a.dateUpdated 
, a.dateReported