en-USsv-SE
You are here:   Forum
HomeHomeSQLug.SESQLug.SETävlingarTävlingarSQLug.se challenge 2012SQLug.se challenge 2012
Previous
 
Next
New Post
5/27/2012 10:51 AM
 

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 är Nordens största IT-utbildningsföretag med utbildningscenter i Sverige, Danmark och Finland.


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, ackumulerad kvantitet för detta 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

SQLUGChallenge2012_Setup.txt

Ladda ned dessa script och kör i SQL Server Management Studio (eller annat favoritverktyg).

Regler

§  Tävlingen är öppen för 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).

Tävlingsvinster

Vi tackar Informator, som sponsrar tävlingen med mycket fina vinster!

Frågor

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

Lycka till!

 

 
New Post
6/13/2012 1:34 AM
 
Ett litet förtydligande till tävlingen.

Om ni skapar index i er lösning:
  • Tiden för att skapa indexet räknas med i den totala tiden för ert tävlingsbidrag
  • Ni måste också ta bort indexet

Lycka till och glöm inte att 30 juni är sista dag att skicka in tävlingsbidrag!

 
New Post
6/13/2012 7:28 AM
 
Här är de första preliminära resultaten. Det är bara de lösningar som ger rätt resultat som redovisas.
Det märks att det är i slutet av tävlingsperioden. Flera lösningar har blivit betydligt förbättrade! Nyare resultat finns längre ned i denna tråd.


1. Stefan Gustavsson (#4), Acando AB
2. Mikael Eriksson (#5), CompuGroup Medical
3. Christian Janssen (#3), H&M
4. Sergey Klimkevich (#2), Net Entertainment
5. Henrik Bergqvist (#5), Part Trap AB
6. Toine Rozemeijer (#2), Dustin
7. Rolf Mattson (#1), Connecta AB
8. Joakim Wennergren (#3), Neovoci AB
9. Johan Jersby (#1), Avega Group
10. Ola Hallengren (#1), Saxo Bank
11. Per Hederos (#2), KnowIT
12. Ulf Bergqvist (#1), Sogeti


Finns ert namn inte med i listan så ger er lösning inte rätt resultat. Gör ett nytt försök!

Jag har själv en Lumia 800 och det är en av de bästa telefoner jag haft i mitt arbete. Den intregrerar mot allt och fungerar som man önskar.

Jag kommer att köra om alla korrekta lösningar igen efter sista inlämningstillfället.


//Peter
 
New Post
6/19/2012 8:16 AM
 
Hur mäts tiden?
 
New Post
6/19/2012 6:42 PM
 
Tiden mäts med den inbyggda klockan på servern. Vi har inget stoppur som vi startar när scriptet börjar och stoppar när scriptet är kört klart.

Vi använder en programvara "Test Harness" som är utvecklat för just det här ändamålet.


//Peter

 
Previous
 
Next
HomeHomeSQLug.SESQLug.SETävlingarTävlingarSQLug.se challenge 2012SQLug.se challenge 2012


Annons