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

Odpowiedz Nowy wątek
2019-09-03 11:59
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ź !

Pozostało 580 znaków

2019-09-03 12:11
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

Pozostało 580 znaków

2019-09-03 12:26
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ą.

Pozostało 580 znaków

2019-09-03 12:30
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'

Pozostało 580 znaków

2019-09-03 13:56
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 ? : )

Pozostało 580 znaków

2019-09-03 14:04
0

No to dodaj GETDATE() w SELECT i GROUP BY

Nie jest potrzebny w group by - Panczo 2019-09-03 14:12
Prawda ...zaćmienie. :| Czyli tak naprawdę MIN(date) jak napisałeś poniżej, jest dokładnie tym co chce uzyskać OP (pomijam statyczny wpis). - BlackBad 2019-09-03 14:58

Pozostało 580 znaków

2019-09-03 14:04

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

Pozostało 580 znaków

2019-09-03 14:42
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ć ?

Pozostało 580 znaków

2019-09-03 14:50
0

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

Sam wybierasz co chcesz

Pozostało 580 znaków

2019-09-03 14:57
0

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

Pozostało 580 znaków

2019-09-03 15:26
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
edytowany 1x, ostatnio: Panczo, 2019-09-03 15:27

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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