2017-01-18 3 views
1

In folgt meine vorherige Frage aufCount Anzahl der Tage on_hire Januar

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

ich jetzt versuchen, die Tage, an nur in dem eingestellten variablen Zeitraum mieten zu zählen.

Ich habe die Anzahl der Tage ausgearbeitet das Werkzeug über die Vermietung

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

21121231 ist das Datum es, wenn das Werkzeug aus noch verwendet verwenden ist.

Ich versuche, die Anzahl der Tage zu arbeiten, es Januar leihweise war nur

,(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' 

Dies ist mit offensichtlich nicht funktioniert, aber das ist der Weg, den ich im Moment versucht habe.

Beispieldaten

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 

Ich habe eine Variable set @startdate = 20160101 und @enddate = 20160131

Jede Hilfe wird sehr geschätzt, ich bin immer noch lernen, aber es immer :-)

Prost

Antwort

0

Etwas so was?

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

landete ich es wie dieses

,(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' 
tun
Verwandte Themen