Witam.
Mam ciekawy problem do rozwiązania w t-sql, mianowicie:
Mam dwie tabele, z których każda zawiera pola: indeks, data, ilość.
Tabela 1:
| Id Index Data Ilość IdTabela2 |
|---|
| 1 1 2024-01-01 5 null |
| 2 1 2024-01-02 4 null |
| 3 1 2024-01-03 6 null |
| 4 2 2024-01-01 50 null |
| 5 2 2024-01-02 40 null |
| 6 3 2024-01-03 3 null |
Tabela 2:
| Id Index Data Ilość | Nagłówek 2 |
|---|---|
| 1 1 2024-01-11 3 | |
| 2 1 2024-01-12 10 | |
| 3 2 2024-01-11 100 | |
| 4 2 2024-01-12 30 | |
| 5 3 2024-01-13 30 |
Chodzi mi o napisanie takiego zapytania, które poszczególne pozycje tabeli 1 rozchoduje mi ilościowo tabela 2 powiązana poprzez pole Index. Algorytm ma być taki:
-
Biorę pierwszą pozycję wg daty z tabeli 1.
-
Pobieram pierwszą pozycję wg daty z tabeli 1, która ma to samo pole Index i ilość jest większa od zera.
-
Od pozycji z tabeli 1 odejmujemy ilość z pozycji z tabeli 2 ale tak aby nie zejść poniżej zera i wpisujemy do nowego pola Id pozycji z tabeli 2.
-
Pole ilość z pozycji tabeli 2 pomniejszamy o ilość odjęta w tabeli 1.
-
Sprawdzamy czy pozycja z tabeli 1 ma ilość większą od zera. Jeżeli tak to wracamy do punktu 2. Jeżeli nie to bierzemy następny wiersz z tabeli 1 i wracamy do punktu 2.
W wyniku mam otrzymać tabelę 1 (może być powiększona o nowe wiersze) rozchodowaną przez tabelę 2.
Czy ktoś ma może pomysł jak podejść do tematu.
Zaznaczam, że nie interesują mnie kursory ani pętle.
Musi to być na jednym, może 2-3 zapytaniach. Będę operował na dużym zbiorze danych i chodzi mi o wysoką wydajność. Zapytanie musie działać szybko. Mówimy tu o zbiorze w tabeli 1 sięgającej kilkudziesięciu tysięcy pozycji.Z góry dziękuję za wszelkie podpowiedzi.