Nu drar årets svenska mästerskap för SQL Server utvecklare igång, arrangerat av SQLUG. Uppgiften är relativt enkel att komma igång med men svår att lösa optimalt.
Tävlingen är både individuell och per företag. Som tävlande representerar man både sig själv som individ och det företag man jobbar på.
Bästa individuella insats vinner ett presentkort på 990 kr hos Liveit, som kan användas till vin- och chokladprovning för två, prova stridsflygsimulator, spabehandling eller vad man nu föredrar.
De bästa företagen belönas med följande vinster från Red Gate:
1:a pris -
Red Gate SQL Backup Pro, värde $795
2:a pris -
Red Gate SQL Virtual Restore, värde $495
3:e pris -
Red Gate SQL Prompt, värde $195
Den största vinsten är naturligtvis äran att kunna titulera sig vinnare i SQLug.se challenge 2011!
Tävlingssponsorer:

Tävlingsuppgift
Du driver en dating-site där personer har lagt upp sin personliga information. Uppgiften är nu att skriva en effektiv sökfunktion som söker enligt en uppsättning kriterier.
Exempelvis kanske du söker efter dessa kriterier
| WantedSetID |
AttributeName |
AttributeValue |
| 1 |
Kön |
F |
| 1 |
Ålder |
B |
| 1 |
Körkort |
B |
| 2 |
Kön |
F |
| 2 |
Ålder |
B |
| 3 |
Kön |
M |
| 3 |
Ålder |
C |
Uppgifterna ska tolkas som att i första hand söker du efter "en kvinna i ålder B som har körkort B", i andra hand "en kvinna i ålder B" och i tredje hand "en man i ålder C". Värdet på ett attribut är alltid av typen char(1). Sökningen är case insensitive.
Sökkriterierna finns i en tabell som heter WantedAttribute. Som du ser är tabellen WantedAttribute flexibel och kan innehålla en eller flera sökset och varje sökset kan innehålla en eller flera matchnings-attribut. Sökfunktionen skall returnera vilka sökset som är uppfyllda och för vilka personer.
Tävlingsuppgiften är att komma fram till en lösning som fixar uttaget så snabbt som möjligt. Vi vill ha prestanda! I första hand kommer vi att titta på den totala tiden (duration) för lösningen, eftersom det är den tiden slutanvändaren märker av. Skulle två eller flera lösningar vara ungefär lika i tid, kommer antalet processorer som används samt mängden reads att vägas in för att avgöra vilken lösning som är mer effektiv när den är ungefär lika snabb.
Servern som kommer att användas för testkörningarna har 16 kärnor på 2.5GHz samt 56GB RAM varav 40GB är dedikerat till SQL Server Service. Diskarna finns på ett Hewlett Packard SAN. Första körningen körs med kall cache, övriga körningar med varm cache.
Tabellerna innehåller följande data
1) People innehåller namn på alla som anmält sig på siten
2) Attribute innehåller alla attribut som går att registrera
3) PeopleAttribute innehåller alla värden för alla attribut som alla People valt att spara
4) WantedAttribute innehåller de värden som du vill söka på
Med exempeldatat här kan du se att Carri inte matchar alla sökattribut för set 1 men gör det för set 2.
Du ser att Robin matchar set 1 och övermatchar set 2. Du ser även att Vera inte matchar alla attribut för set 1 men övermatchar set 2. Ingen matchar set 3.
Din SQL-kod skall returnera svaret som tabellrader. Sorteringsordning spelar ingen roll. Resultatet för exempeldatat blir
| PeopleID |
WantedSetID |
| 1 |
2 |
| 2 |
1 |
| 2 |
2 |
| 3 |
2 |
Material
Ladda ned dessa script och kör i SQL Server Management Studio (eller annat favoritverktyg).
Regler
- Tävlingen är öppen för alla SQLUGs medlemmar.
- Tävlingsbidrag postas som svar på detta forum. De skall märkas med namn och företag.
- Vinnare är den/de som har presterat den snabbaste lösningen.
- Tillåtna metoder är T-SQL och SQL CLR. SQL CLR måste köras i safe läge och källkoden måste bifogas.
- Inga schemaförändringar på befintliga tabeller är tillåtna förutom att skapa icke-klustrade index.
- Det är tillåtet att skapa index, vyer, funktioner och procedurer (men ej indexerade vyer). Lösningarna måste städa upp efter sig så att den kan köras om och om igen. Posta din lösning uppdelad på tre script: Setup, Huvudkod, Uppstädning
- Eventuell vinstskatt betalas av vinnarna.
- Lösningarna kommer att testköras på en större mängd testdata för att tävlingen skall bli utslagsgivande.
- Tävlingen avgörs av en jury som består av Johan Åhlén, Tibor Karaszi, Tobias Thernström och Peter Larsson.
- Deadline för att komma med tävlingsbidrag är 26 maj kl 22:00 (svensk tid).
Vinster
Individuell tävling: Första pris är ett presentkort på 990 kr från liveit.se
Företagstävling: De tre bästa lösningarna vinner licenser från Red Gate
Hur du tävlar
Posta din lösning på det här forumet. Skriv ditt namn och företagsnamn (om du också representerar ett företag/organisation).
Frågor
Frågor angående tävlingen ställs i detta forum.
Lycka till!
//Peter Larsson