SQL - Filteren van enkel de laatste mutatie van een product

Pagina: 1
Acties:

Onderwerpen

Vraag


  • brtk
  • Registratie: November 2006
  • Laatst online: 12:46
Mijn vraag

Heb een grote SQL tabel (ca 550k regels) met (voorraad)mutaties, komende uit Unit4 Wholesale. In deze tabel zijn per product-lotnummer combinatie ALLE (voorraad)mutaties opgeslagen.

Het doel is om per product-lotnummer combinatie (de unieke sleutel) enkel nog de LAATST gemaakte mutatie over te houden.

Er zijn SYSDATE en SYSTIME velden aanwezig.


Relevante software en hardware die ik gebruik

Unit4 Multiverse Wholesale
Microsoft Excel 2019
PowerQuery



Wat ik al gevonden of geprobeerd heb

Geprobeerd met sorteren en verticaal zoeken. Ben toch niet helemaal zeker van een juist resultaat.
Geprobeerd met sorteren en ontdubbelen. Ben toch niet helemaal zeker van een juist resultaat.

Is er een manier om in PowerQuery of M tegen SQL te zeggen dat ik van iedere product-lotnummer combinatie alleen nog de laatst gemaakte mutatie in de tabel wil overhouden?

[ Voor 6% gewijzigd door brtk op 23-09-2021 09:37 ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Met een "groupwise maximum" kun je in SQL inderdaad gewoon filteren op het laatste record aan de hand van een criteria.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • brtk
  • Registratie: November 2006
  • Laatst online: 12:46
Dank je Woy, ik ga met dat commando aan de slag!

Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het is niet zozeer een commando, maar met die term moet je vast meer kunnen vinden op google ;)

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • +1 Henk 'm!

  • Sefyu
  • Registratie: November 2006
  • Niet online
Als je op zoek bent naar een SQL-query die het gewenste resultaat geeft (i.p.v. het puur met de Power Query/M-functionaliteit wil doen) dan zou je het met een window function ongeveer zo kunnen doen:

code:
1
2
3
4
5
6
7
8
select * from (
    select 
        product_lot_number
        dense_rank() over (partition by product_lot_number order by sysdate desc) as rank
    from 
        je_tabel
    )
where rank = 1


Hiermee sorteer je voor elke groep rijen met hetzelfde product_lot_number op basis van de sysdate, waarbij de meest recente rank 1 krijgt. Door in de buitenste select te filteren op rijen met rank 1, krijg je alleen de meest recente record terug voor elke product_lot_number.

Acties:
  • +1 Henk 'm!

  • brtk
  • Registratie: November 2006
  • Laatst online: 12:46
Hartelijk dank @Woy en @Sefyu, met jullie aanwijzingen is het me gelukt!
Pagina: 1