MAX
Omschrijving
MAX
is een aggregatiefunctie voor vensters die rijen partitioneert in groepen, rijen ordent op een veld en de maximale (hoogste) waarde in de groep retourneert.De
PARTITION BY
bepaalt welke velden moeten worden gebruikt om een set invoerrijen in groepen te partitioneren. De ORDER BY
bepaalt hoe de rijen in de partitie worden gerangschikt.De invoerrijen worden in groepen gescheiden in groepen op basis van de partitioneringsvelden, de rijen worden geordend op basis van de volgordevelden en berekent vervolgens de aggregatieexpressie (maximum voor deze functie) in elke groep.
Syntaxis
whereMAX(input_field)OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]]RANGEBETWEENvaluePRECEDINGANDCURRENT ROW|ROWSwin_boundary|BETWEENwin_boundaryANDwin_boundary)win_boundarycan be:UNBOUNDED PRECEDINGvaluePRECEDINGUNBOUNDED FOLLOWINGvalueFOLLOWINGCURRENT ROW
Retourwaarde
De retourwaarde is van hetzelfde veldtype als de invoerwaarde.
Invoerparameters
- input_field
- Vereist. Het veld waarop de aggregatiefunctie moet worden uitgevoerd. U kunt elk numeriek veld of een valutaveld gebruiken.
- OVER()
- Vereist.OVERmoet worden gebruikt binnen aMAXexpressie.
- PARTITION BYpartitioning_field
- Vereist. De . gebruikenPARTITION BYom een of meer velden op te geven voor het partitioneren van een groep invoerrijen. U kunt elk veldtype opgeven, behalve Valuta. Voorbeeld: u geeft het veld Maand op als het partitioneringsveld, zodat alle records met dezelfde waarde voor Maand in één partitie worden gegroepeerd.
- ORDER BYordering_field
- Vereist. De . gebruikenORDER BYom op te geven hoe de invoerrijen in de partitie moeten worden geordend met behulp van de waarden in het opgegeven veld binnen elke partitie. U kunt elk veldtype opgeven, behalve Valuta. U moet echter een numeriek veldtype gebruiken, zoals Geheel getal of Numeriek wanneer u de gebruiktRANGEclausule.U kunt de gebruikenDESCofASCtrefwoorden om te sorteren in aflopende volgorde (van hoge naar lage waarden, NULL-waarden zijn laatste) of oplopende volgorde (van lage naar hoge waarden, NULL-waarden zijn eerst) voor elk bestelveld. Als u geen sorteervolgorde voor een bestelveld opgeeft, worden de rijen automatisch in oplopende volgorde gesorteerd.
- ROWS | BEREIK
- Vereist. DeROWSandRANGEMet clausules wordt het specifieke aantal rijen (ten opzichte van de huidige rij) binnen de partitie gedefinieerd door een vensterframe op te geven. U definieert het vensterframe door begin- en eindpunten binnen de partitie op te geven, ook wel venstergrenzen genoemd. Het vensterframe is de set invoerrijen in elke partitie waarover de aggregatieexpressie moet worden berekend (maximum voor deze functie). Het raamkozijn kan één, meerdere of alle rijen van de partitie bevatten.BeideROWSandRANGEgeef het rijbereik op ten opzichte van de huidige rij, maarRANGEwerkt logisch op waarden (logische koppeling) enROWSwerkt fysiek op rijen in de gegevensset (fysieke koppeling).RANGEbeperkt dat het vensterframe rijen bevat waarvan de waarden binnen het opgegeven bereik liggen, ten opzichte van de huidige waarde.ROWSbeperkt het vensterframe tot rijen die zich fysiek naast de huidige rij bevinden.GebruikenRANGEom absolute venstergrenzen te definiëren, zoals de afgelopen 3 maanden of het jaar tot heden. Wanneer u . gebruiktRANGE, deORDER BYVoor de component '' moet een numeriek veldtype worden gebruikt, zoals Geheel getal of Numeriek.Voorbeeld: stel dat u een geheel getal hebt met de naam MonthNum dat het nummer van de maand in het jaar vertegenwoordigt (waarden 1 tot 12). Als u alle waarden van de afgelopen 3 maanden wilt opgeven, ordent u op MonthNum en gebruikt uRANGE BETWEEN 2 PRECEDING AND CURRENT ROW. Deze RANGE-component bevat de huidige maand en de vorige twee maanden, wat resulteert in een totaal van drie maanden.Wanneer u een gegevensset publiceert die een vensterfunctie bevat metRANGE, moet het aantal rijen in het venster 1000 of minder zijn. Als een bepaald venster meer dan 1000 rijen bevat, mislukt de publicatietaak.
- win_boundary
- Vereist. De venstergrenzen definiëren het begin- en eindpunt van het raamkozijn. De venstergrenzen zijn relatief ten opzichte van de huidige rij.APRECEDINGMet de component '' wordt een venstergrens gedefinieerd die lager is dan de huidige rij (het aantal rijen dat vóór de huidige rij moet worden opgenomen). DeFOLLOWINGMet de component '' wordt een venstergrens gedefinieerd die groter is dan de huidige rij (het aantal rijen dat na de huidige rij moet worden opgenomen).Als u slechts één venstergrens opgeeft, wordt de huidige rij als de andere grens in het vensterframe gebruikt (de boven- of ondergrens, afhankelijk van de syntaxis van de expressie). DeUNBOUNDEDtrefwoord bevat alle rijen in de opgegeven richting. Als u zowel het begin als het einde van een vensterframe moet opgeven, gebruikt u deBETWEENandANDtrefwoorden.Wanneer u een specifiek aantal rijen opgeeft, moet dewaarde100 of minder zijn.Voorbeeld:ROWS 2 PRECEDINGbetekent dat het venster 3 rijen groot is, beginnend met 2 rijen vóór tot en met de huidige rij.Voorbeeld:ROWS UNBOUNDED FOLLOWINGbetekent dat het venster begint met de huidige rij en de huidige rij en alle rijen na de huidige rij bevat.
Voorbeelden
Voorbeeld: u hebt een gegevensset met deze rijen en velden.
Hiërarchische organisatie | Kwartaal | Naam | Compensatiewijziging: |
|---|---|---|---|
Marketing | 2019-Q1 | Goho | 2000,00 |
Marketing | 2019-Q1 | Freeman | 1000,00 |
Marketing | 2019-Q1 | Smit | 2500,00 |
Consulting | 2019-Q1 | Gomez | 5000,00 |
Consulting | 2019-Q1 | Kimura | 3000,00 |
Consulting | 2019-Q1 | Fitz | 3500,00 |
Consulting | 2019-Q2 | Gomez | 0 |
Consulting | 2019-Q2 | Kimura | 2000,00 |
Consulting | 2019-Q2 | Fitz | 15000,00 |
U kunt de grootste wijziging in de beloning (veld
'Beloningswijziging'
) berekenen voor elke hiërarchische organisatie in elk kwartaal.Om ervoor te zorgen dat voor elke rij in een partitie dezelfde waarde wordt geretourneerd, moet u de rijen in aflopende volgorde (
DESC
) in hetzelfde veld als het invoerveld rangschikken, zodat de hoogste beloningswijziging als eerste in elke partitie wordt weergegeven.Gebruik deze expressie in het veld
'Maximale beloningswijziging'
:MAX([Comp Change]) OVER( PARTITION BY [Supervisory Org], [Quarter] ORDER BY [Comp Change] DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING )
U krijgt de volgende resultaten:
Hiërarchische organisatie | Kwartaal | Naam | Compensatiewijziging: | Maximumbedrag beloningswijziging |
|---|---|---|---|---|
Consulting | 2019-Q1 | Gomez | 5000,00 | 5000,00 |
Consulting | 2019-Q1 | Fitz | 3500,00 | 5000,00 |
Consulting | 2019-Q1 | Kimura | 3000,00 | 5000,00 |
Consulting | 2019-Q2 | Kimura | 2000,00 | 2000,00 |
Consulting | 2019-Q2 | Fitz | 15000,00 | 2000,00 |
Consulting | 2019-Q2 | Gomez | 0 | 2000,00 |
Marketing | 2019-Q1 | Smit | 2500,00 | 2500,00 |
Marketing | 2019-Q1 | Goho | 2000,00 | 2500,00 |
Marketing | 2019-Q1 | Freeman | 1000,00 | 2500,00 |