Tävlingsuppgift 2012

Nu drar 2012 års svenska mästerskap för SQL Server utvecklare igång, arrangerat av SQLUG.

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 en Nokia Lumia 800 smartphone. Bästa företagsinsats vinner en presentcheck på utbildning värd 15 000 kr hos Informator.

Den största vinsten är naturligtvis äran att kunna titulera sig vinnare i SQLug.se challenge 2012!

Tävlingssponsorer:

Informator

Tävlingsuppgift

En strategi på börsen är att använda sig av så kallad ”blankning”. Det innebär att man säljer aktier som man lånar. Om man sedan kan köpa tillbaka samma antal aktier till ett lägre pris så kan man göra en vinst.

Naturligtvis vill de som lånar ut aktier få betalt. Årets tävlingsuppgift är att hjälpa en aktiemäklare att ta fram ett kontoutdrag på blankningsaffärer. Som utgångspunkt har vi alla transaktioner. Så fort det uppstår ett negativt saldo inleds en blankningsaffär och så fort saldot inte längre är negativt upphör blankningsaffären. Aktiemäklaren vill ha alla blankningsaffärer numrerade och dessutom skall varje transaktion inom blankningsaffären finnas med.

Vi har följande fält i vår källdata:

  • TransId, som är ett löpnummer och anger ordningen på transaktioner. Är primärnyckel.
  • Konto, ett kundnr
  • Instrument, en sträng på 6 tecken
  • Kvantitet, positivt vid köp och negativt vid sälj

Exempel

TransId Konto Instrument Kvantitet
173891 552207 ATCO A 500
173892 552207 ATCO A -400
173893 552207 ATCO A -300
173994 552207 ATCO A 200
173995 552207 ATCO A -100
173996 552207 ATCO A 300
173997 552207 ATCO A -1000
173998 552207 ATCO B 100
174001 552207 ATCO B 200
174002 339104 ATCO A -1000
174055 339104 ATCO A 1100
174056 339104 ATCO B -1000
174057 339104 ATCO B 900

Utresultatet skall ha följande fält

  • TransId
  • Konto
  • Instrument
  • AckKvantitet, summan av alla kvantitetsfält hittills för samma konto/instrument.
  • BlankningsNr, löpnummer på blankningsaffären. Börjar om på 1 för varje nytt instrument eller konto.
  • RadNr, löpnummer inom blankningsaffären. Börjar om på 1 för varje ny blankningsaffär.

Med vårt exempel ovan skulle utresultatet bli

TransId Konto Instrument AckKvantitet BlankningsNr RadNr
173893 552207 ATCO A -200 1 1
173994 552207 ATCO A 0 1 2
173995 552207 ATCO A -100 2 1
173996 552207 ATCO A 200 2 2
173997 552207 ATCO A -800 3 1
174002 339104 ATCO A -1000 1 1
174055 339104 ATCO A 100 1 2
174056 339104 ATCO B -1000 1 1
174057 339104 ATCO B -100 1 2

Detta skall tolkas som att den första blankningsaffären inleds med TransId 173893 då kunden har -200 aktier i ATCO A. TransId 173994 upphör blankningsaffären, då kunden inte längre har negativt antal aktier i ATCO A. I vissa fall, som TransId 174057, ligger kunden på en negativ utgående ackumulerad kvantitet. I så fall är det den sista transaktionen med samma konto/instrument som också är sista transaktion i blankningsaffären.

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. Diskarna finns på ett Hewlett Packard SAN. Alla körningarna görs med tömd cache. SQL Server 2012 används.

Din SQL-kod skall returnera svaret som tabellrader. Det skall sorteras på TransId.

Material

  • txt

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 skickas som email till angiven adress. 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.
  • 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 de kan köras om och om igen (och ej stör andra användares lösningar).
  • 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, Lars Utterström och Peter Larsson.
  • Deadline för att komma med tävlingsbidrag är 30 juni kl 22:00 (svensk tid).

Hur du tävlar

Emaila din lösning till sqlugchallenge2012@sqlug.se. Skriv ditt namn och företagsnamn (om du också representerar ett företag/organisation). Ditt sql-script skall namnges med ditt namn och ett versionsnummer (t ex Anders_Andersson_1.sql).

Frågor

Frågor angående tävlingen ställs i detta forum.

Lycka till!