2017-01-18 2 views
1

В последующем к моему предыдущему вопросуПодсчет количества дней on_hire в JAN

SQL Show all items that are on hire before and up until a certain date

Я сейчас пытаюсь считать дни на на прокат только в установленном переменном период.

я выработал количество дней этот инструмент на прокат с помощью

,(CASE WHEN off_hire = '21121231' 
     THEN datediff(DAY, on_hire, GETDATE()) 
     ELSE datediff(DAY, on_hire, offhire)+1 
    END) AS 'DAYS_OF_RENTAL' 

21121231 является дата его использует, если инструмент все еще вне.

Я пытаюсь выработать количество дней это было по найму в JAN только с помощью

,(CASE WHEN (on_hire > @startdate) AND off_hire > @end_date 
     THEN datediff(DAY, @startdate, @enddate) 
     ELSE datediff(DAY, on_hire, off_hire)+1 
    END) AS 'CALC_DAYS_ON_HIRE' 

Это, очевидно, не работает, но это маршрут я пытался в данный момент.

Пример данных

tool  on_hire off_hire 
tool 1 02/01/2016 15/01/2016 
tool 2 16/12/2015 16/01/2016 
tool 3 05/01/2016 20/02/2016 

У меня есть переменная set @startdate = 20160101 и @enddate = 20160131

Любая помощь очень ценится, я все еще учусь, но получить там :-)

Приветствиях

ответ

0

что-то как это?

declare @t table (id int, tool varchar(10), on_hire date, off_hire date); 
insert into @t values 
(1,1,'2016-01-01','2016-01-10'), 
(2,1,'2016-01-15','2016-01-20'), 
(3,2,'2015-12-01','2016-01-10'), 
(4,3,'2016-01-20','2016-02-10'), 
(5,4,'2015-01-01','2017-01-10') 


select tool, sum(datediff(d,on_hire,off_hire)) + 1 dayshired 
from 
(
select tool, 
     case 
      when on_hire < '2016-01-01' then '2016-01-01' 
      else on_hire 
     end as on_hire, 
     case 
      when off_hire > '2016-01-31' then '2016-01-31' 
      else off_hire 
     end as off_hire   
from @t 
) s 
group by s.tool 
0

Я закончил тем, что делал это, как этот

,(CASE WHEN (on_hire < @startdate) AND off_hire > @enddate 
     THEN datediff(DAY, @startdate, @enddate)+1 

     WHEN (on_hire < @startdate) AND off_hire < @enddate 
     THEN datediff(DAY, @startdate, off_hire)+1 

     WHEN (on_hire > @startdate) AND off_hire > @enddate 
     THEN datediff(DAY, on_hire, @enddate) 

      WHEN (on_hire > @startdate) AND off_hire < @enddate 
     THEN datediff(DAY, on_hire, off_hire) 

    END) AS 'CALC_DAYS_ON_HIRE' 
Смежные вопросы