W mojej konstrukcji mam następujące czynności, chciałbym zachować (żółty) najnowsze daty i usunąć pozostałe? Nie trzeba znać najnowszej daty (tj. 17/4/2021 i 10/2/2021 w moim przykładzie) dla każdego magazynie, ale wiem, że chcę zachować tylko dwa ostatnie przedmioty.

Czy to jest możliwe?

Dziękuję Ci

enter image description here

0
matel 17 kwiecień 2021, 09:36

1 odpowiedź

Najlepsza odpowiedź

Uwaga: Przychodnia, że daty nie powtarzają się w ramach każdej grupy stock_id w tabeli, więc dwa daty górne są zawsze wyjątkowe.

Możesz przypisać pozycję do każdego wiersza w {x0}} po zamówieniu według daty i usuwania wierszy, gdzie ranga jest większa niż 2.

DELETE FROM mytable
WHERE (stock_id, date) NOT IN (
    SELECT
        stock_id,
        date
    FROM (
        SELECT
            stock_id,
            date,
            row_number() over (partition by stock_id order by date desc) as rank
        FROM mytable
    ) ranks
    WHERE rank <= 2
)
1
AlexK 17 kwiecień 2021, 07:39