Wpis z mikrobloga

W wolnych chwilach uczę się #sql. Chce sobie obliczyć czas trwania reklamacji. Na początku wyciągam daty początkowe i końcowe:

(select min(RLRDataWykonania)
from ReklRealizacja
where RLE
Id = RLRRLEId and RLRNazwa ='Dodanie elementu') as 'Początek',

(select max(RLRDataWykonania)
from ReklRealizacja
where RLE
Id = RLRRLEId and RLRNazwa ='Uznanie reklamacji') as 'Zakończenie',

Poniższe rozwiązanie działa:
((select max(RLRDataWykonania) from ReklRealizacja where RLEId = RLRRLEId and RLRNazwa ='Uznanie reklamacji') - (select min(RLRDataWykonania) from ReklRealizacja where RLEId = RLRRLEId and RLRNazwa ='Dodanie elementu')) as xxx

ale czy jest jakaś opcja żeby korzystając z aliasów obliczyć różnicę 'Zakończenie' - 'Początek' ?

#sql #programowanie
  • 7
@lekkonieobecny: problemem nie jest samo odejmowanie, ale o argumenty / parametry tego działania. Jak zastąpić:
DATEDIFF(day,(select max(RLRDataWykonania) from ReklRealizacja where RLEId = RLRRLEId and RLRNazwa ='Uznanie reklamacji'),(select min(RLRDataWykonania) from ReklRealizacja where RLEId = RLRRLEId and RLRNazwa ='Dodanie elementu')) as roznica

DATEDIFF(day, Zakończenie, Początek)

Kolumny Zakończenie i Początek są aliasami.
a spróbuj tak: @biju:

select
datediff(day,
max(case when RLRNazwa ='Uznanie reklamacji' then RLRDataWykonania else null end),
min(case when RLRNazwa ='Dodanie elementu' then RLRDataWykonania else null end)
) czas_trwania
from ReklRealizacja
where RLEId = RLRRLEId
group by RLEId