# 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:

FirstSortedValue (FirstSortedValue ([ distinctdistinct ] value, sort-weight [, rank ] ] value, sort-weight [, rank ]))

Returnerad datatyp: dual

Argument:

FirstSortedValue-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;
`

Resultat för exempel 1

| 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;`

Resultat för exempel 2

| 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;`

Resultat för exempel 3

| 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.