Sumowanie narastające wg DATY - SQL

Odpowiedz Nowy wątek
2019-09-12 11:59
0

Witam,
mam w mej ocenie nie mały orzech do zgryzienia i już nie pierwszy dzień z tym walczę, stąd proszę o pomoc.

Mam przygotowane zapytanie z bazy, gdzie potrzebuję umieścić kolumnę, która będzie sumować:

  • pod warunkiem tego samego indeksu,
  • daty mniejszej, bądź równej tej z danego wiersza;
  • lokalizacji w magazynie (1,2,3,4)
    Zmiany na danym indeksie mogą być na plus (dostawa), bądź na minus (rozchód), stąd w danym wierszu potrzebuję sumę uwzględniającą zmianę przed (daty wcześniejsze), jak i uwzględniającą zmianę w danym wierszu. Odrębnie potrzebuję takie dane dla każdego z magazynów.

najlepiej obrazuje to przykładowa tabela poniżej:
screenshot-20190912115744.png

Bardzo liczę na pomoc, z góry dziękuję za zainteresowanie i chęć podzielenia się wiedzą i umiejętnościami.

Pozostało 580 znaków

2019-09-12 15:48
1

Bez zapytania trudno poradzić, bo nie bardzo wiem gdzie jest kolumna suma z przykładu posta...
Podejrzewam, że chodzi o query - neutral i to, że jest to powielone w ramach jednej daty.
Jeżeli tak to albo faktycznie dodasz do order by indeks który będzie miał kolejność, albo sobie go "stworzysz":

select
    lp
    ,indeks
    ,magazyn
    ,datac
    ,zmiana
    ,sum(zmiana) over (partition by indeks,magazyn order by lp) as suma
from (select
          row_number() over (partition by indeks,magazyn order by data) lp
          ,*
      from
          tb) as t
 order by
     2,3,4

http://sqlfiddle.com/#!18/5b073e/5

P.S. Co do VPN odchacz opcję "użyj domyślnej bramy w sieci zdalnej" to nie powinienes "gubic" netu

Pozostało 580 znaków

2019-09-12 15:50
0

Bardzo podobało mi się rozwiązanie 'PANCZO' i sporo energii włożyłem w jego implementację, aczkolwiek popłynąłem przy rozbudowie "FROM", gdzie potrzebowałem 3 tabele tam umiejscowić, dodatkowo tabelę z magazynami upraszczam poprzez "CASE" do 4 i niestety poległem, nie znaczy że przestaję szukać rozwiązania, być może na nowo zacznę, bo modyfikacja powstałej hybrydy jest ciekawa.

Teraz sobie myślę. że jak samo zapytanie działa to utworzę tabelę tymczasową i korzystając z tego zapytania wyrzucę całość plus pożądaną kolumnę, hmm..

Pozostało 580 znaków

2019-09-12 15:54

To wykorzystaj cte, będzie łatwiej w zapisie:

with tb as (
--miejsce na twoje zapytanie
)

--miejsce na moje zapytanie
select * from tb
edytowany 1x, ostatnio: Panczo, 2019-09-12 15:54
zrobiłem dokładnie tak, sprawdzam rezultat, wygląda obiecująco... - Kazimierz Olejczyk 2019-09-12 16:08
wszystko śmiga, serdeczne dzięki!!! - Kazimierz Olejczyk 2019-09-12 16:30

Pozostało 580 znaków

2019-09-12 16:35
0

Dziękuje wszystkim za chęć pomocy!!!
Nadal jestem w szoku, nie jedną zagwozdkę z SQL-em miałem, ale zawsze jakoś sam, sam i sam, co się kończyło nieprzespanymi nocami, bądź brakiem satysfakcji dnia następnego.

Dzięki podpowiedzią użytkownika Panczo i jego płynnemu dostosowaniu rozwiązania do mych postępów przy rozwikłaniu zagwozdki, co sprawia w moc metody GTD, że mam satysfakcję z dopracowania zapytania.

Naturalnie nie jestem na tyle mocny by jeszcze rad udzielać, ale stronę tą już dodałem do ulubionej, kto wie może za rok-dwa :)

Jeszcze raz DZIĘKI!!!

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