SQL sumowanie forecastu z każdego dnia z przyszłości

0

Hej,

Zwracam się do was z pytaniem jakich funkcji najlepiej użyć aby uzyskać efekt opisany poniżej.
A więc moje query do tej pory to:

select source, item, forecast, date, forecast
from forecast table;

A więc forecast jest pokazany w przód na rok. Ja chciałbym żeby był pokazany tylko na 4 tygodnie w przód, nie mam pojęcia jakiej funkcji najlepiej użyć - jakaś podpowiedź ?
No i później jak już mam te 4 tygodnie jak to najlepiej zsumować ? - czyli że jeśli dany source produkuje dany item to chciałbym aby pokazało sumę forecastu na 4 tygodnie a nie dzień po dniu.

Z góry dziękuję za każda podpowiedź !

0

zakładając że 4 tygodnie to 28 dni:

select
    source
    ,item
    ,sum(forecast)
from
    forecasttable
where
    date between getdate() and dateadd(d,28,getdate())
group by 
    source
    ,item
0

Super !
Dzięki za pomoc.

Czy mógłbyś mi mniej więcej podpowiedzieć jak wypełnić tą formułę ?

  • between getdate() and dateadd(d,28,getdate()) ?

czy po pierwszym getdate (w nawiasie) powinienem dać początkową datę ? Czyli jeśli chcę liczyć od przyszłego tygodnia od poniedziałku to datę przyszłego poniedziałku ?
i po następnym get date datę końcową, tak ?

Używam Oracle SQL Developer więc mam nadzieję, że te komendy mi zadziałają bo czasami niektóre nie działają.

0

getdate() biezaca data
dateadd(d,28,getdate()) dodaje do biezacej daty 28 dni

na dzsiejszy dzień, taki zapis będzie równoważny:

where date between '2019-09-03' and '2019-10-01'
0

Super !
Działa dzięki,

A co jeśli chciałbym aby pokazywało mi jeszcze datę ?

To znaczy:
Agreguje dane z czterech tygodni - na przykład '2019-09-03' and '2019-10-01'

No i teraz w mojej końcowej tabelce mam tylko source, item i suma tego forecastu z określonego okresu no ale chciałbym żeby mi także pokazywało tylko jedną datę.
Na przykład aby pokazywało dodatkową kolumnę z datą 2019-09-03 i wiedziałbym że to jest agregacja z przyszłych 4 tygodni.

No bo teraz tak naprawdę mam możliwość:
Source, item, forecast i data na każdy dzień Albo source, item, suma forecastu bez daty.

Jakieś pomysły ? : )

0

No to dodaj GETDATE() w SELECT i GROUP BY

0

No to masz trzy mozliwości:

select
    source
    ,item
    ,sum(forecast)
    ,'2019-09-03'
   ,min(date)
    ,max(date)
from
    forecasttable
where
    date between getdate() and dateadd(d,28,getdate())
group by 
    source
    ,item
0

Super, dzięki za odpowiedź !
Działa, chociaż te MIN i MAX nie są mi chyba zbytnio potrzebne chyba że nie rozumiem ich zastosowania.
Te MIN i MAX pojawiają mi się jako dodatkowe kolumny, czy tak ma być ?

0

podalem 3 mozliwe przykłady, wpisana data na sztywno lub funkcje agregujące min/max.

Sam wybierasz co chcesz

0

A dałoby radę zrobić tak, że co tydzień to się updatuje na nowo kolejnymi 4 tygodniami ?

0

Wszystko sie sprowadza do zakresu dat i nic nie trzeba updatować, tylko poprawnie wyliczyć datę od i datę do, załóżmy, że na dzień dzisiejszy 2019-09-03, chcesz pokazać dane z czterech tygodni, licząc ten w którym jesteśmy obecnie, czyli zakres od pierwszego dnia tygodnia: 2019-09-02 i pokazać 4 tygodnie czyli do 2019-09-29:

--ustaw sesje, aby pierwszym dniem tygodnia był poniedziałek
SET DATEFIRST 1;

--zadeklaruj zmienną @dt
declare @dt as date

--przypisz do zmiennej @dt pierwszy dzień tygodnia z bieżącej daty
set @dt = DATEADD(wk, 0, DATEADD(DAY, 1-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) 


select
    source
    ,item
    ,sum(forecast)
   ,min(date)
    ,max(date)
from
    forecasttable
where
    --weź tylko daty z zakresu od poniedziałku do 4 tygodnie
    date between @dt and dateadd(d,27,@dt)
group by 
    source
    ,item

To samo bez deklarowania zmiennych

SET DATEFIRST 1;
select
    source
    ,item
    ,sum(forecast)
   ,min(date)
    ,max(date)
from
    forecasttable
where
    date between DATEADD(wk, 0, DATEADD(DAY, 1-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE())))  and dateadd(d,27,DATEADD(wk, 0, DATEADD(DAY, 1-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) )
group by 
    source
    ,item
0
insert into 
  forecasttable (source,item,date,forecast)
select
   source,item,dateadd(day,28,date),0
from
  forecasttable
where
   date between getdate() and dateadd(day,28,getdate())
;
0

Hej Dragon,

  1. select
    source,item,dateadd(day,28,date),0 --> czy mógłbyś mi powiedzieć co mam wpisać w day ? i w date obecną datę ? Dlaczego tam jest 0 ?

  2. where
    date between getdate() and dateadd(day,28,getdate()) --> czy w tych nawiasach po getdate mam co wpisać ? / co wpisać w day przed cyfrą 28 ?

0
aidfsn napisał(a):

Dlaczego tam jest 0 ?
A ty oczekiwałeś obliczenia następnego forecast'a nie podając nawet czego ma dotyczyć?

1 użytkowników online, w tym zalogowanych: 0, gości: 1