FirstSortedValue - skriptfunktion
FirstSortedValue() returnerar ett värde från uttrycket som har angetts under value som motsvarar resultatet av sorteringen av argumentet sort_weight. rank tas med i beräkningen om detta är angivet. Om fler än ett resultatvärde delar samma sort_weight för den angivna rank returnerar funktionen NULL.
De sorterade värdena itereras över ett antal poster, enligt vad som definieras i en group by-sats, eller aggregerat över den fullständiga datauppsättningen om ingen group by-sats har definierats.
Syntax:
Returnerad datatyp: dual
Argument:
Argument | Beskrivning |
---|---|
value Expression | Funktionen finner värdet av uttrycket value som motsvarar resultatet vid sortering av sort_weight. |
sort-weight Expression | Uttrycket som innehåller data som ska sorteras. Det första (lägsta) värdet i sort_weight hittas, varifrån motsvarande värde i uttrycket value fastställs. Om du sätter ett minustecken framför sort_weight returnerar funktionen det sista (högsta) sorterade värdet i stället. |
rank Expression |
Genom att ange rank "n" som är större än 1 får du det n:te sorterade värdet. |
distinct |
Om predikatet DISTINCT förekommer framför funktionsargumenten ignoreras alla dubbletter som evaluerats utifrån funktionsargumenten. |
Exempel och resultat:
Lägg till exempelskriptet i dokumentet och kör det. Lägg sedan till åtminstone de fält som listas i resultatkolumnen på ett ark i vårt dokument för att se resultatet.
Exempel 1:
Temp:
LOAD * inline [
Customer|Product|OrderNumber|UnitSales|CustomerID
Astrida|AA|1|10|1
Astrida|AA|7|18|1
Astrida|BB|4|9|1
Astrida|CC|6|2|1
Betacab|AA|5|4|2
Betacab|BB|2|5|2
Betacab|DD|12|25|2
Canutility|AA|3|8|3
Canutility|CC|13|19|3
Divadip|AA|9|16|4
Divadip|AA|10|16|4
Divadip|DD|11|10|4
] (delimiter is '|');
FirstSortedValue:
LOAD Customer,FirstSortedValue(Product, UnitSales) as MyProductWithSmallestOrderByCustomer Resident Temp Group By Customer;
Resultatfält (Customer) | Resultatvärde (MyProductWithSmallestOrderByCustomer) |
---|---|
Astrida | CC |
Betacab | AA |
Canutility | AA |
Divadip | DD |
Funktionen sorterar UnitSales från den minsta till den största, och söker efter värdet Customer med det minsta värdet för UnitSales, den minsta ordern.
Eftersom CC motsvarar den minsta ordern (värdet UnitSales = 2) för kunden Astrida. AA motsvarar den minsta ordern (4) för kunden Betacab, AA motsvarar den minsta ordern (8) för kunden Canutility, och DD motsvarar den minsta ordern (10) för kunden Divadip.
Exempel 2:
Givet att Temp-tabellen är laddad som i föregående exempel:
LOAD Customer,FirstSortedValue(Product, -UnitSales) as MyProductWithLargestOrderByCustomer Resident Temp Group By Customer;
Resultatfält (Customer) | Resultatvärde (MyProductWithLargestOrderByCustomer) |
---|---|
Astrida | AA |
Betacab | DD |
Canutility | CC |
Divadip | - |
Argumentet sort_weight inleds med ett minustecken så att funktionen sorterar den största först.
Eftersom AA motsvarar den största ordern (värdet av UnitSales:18) för kunden Astrida, DD motsvarar den största ordern (12) för kunden Betacab och CC motsvarar den största ordern (13) för kunden Canutility. Det finns två identiska värden för den största ordern (16) för kunden Divadip, därför producerar detta ett null-resultat.
Exempel 3:
Givet att Temp-tabellen är laddad som i föregående exempel:
LOAD Customer,FirstSortedValue(distinct Product, -UnitSales) as MyProductWithSmallestOrderByCustomer Resident Temp Group By Customer;
Resultatfält (Customer) | Resultatvärde (MyProductWithLargestOrderByCustomer) |
---|---|
Astrida | AA |
Betacab | DD |
Canutility | CC |
Divadip | AA |
Detta är samma som i föregående exempel, förutom att kvalificeraren distinct används. Detta gör att dubblettresultatet för Divadip ignoreras, så att ett icke-null-värde kan returneras.