en-USsv-SE
Du är här:   Forum
HemHemSQLug.SESQLug.SETävlingarTävlingarSQLug.se challenge 2010SQLug.se challenge 2010
Föregående
 
Nästa
Nytt inlägg
2010-10-12 16:03
 

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 fem bästa företagen belönas med varsin licens av SQL Source Control, som möjliggör källkodshantering i SQL Server på samma sätt som man hanterar programkod i t ex Visual Studio Team System, värde $295.

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

Tävlingsuppgift

Vi har samlat in mätvärden från en bränslemätare hos ett antal fordon i en tabell som heter MeterReadings.


ID

Tid

VehicleName

MeterValue

1

2010-02-01 08:00:00.000

LIFT1

10000

2

2010-02-01 08:05:00.000

LIFT1

10025

3

2010-02-01 08:15:00.000

LIFT1

10065

4

2010-02-01 08:15:00.000

LIFT2

20000

5

2010-02-01 08:30:00.000

LIFT2

20150

6

2010-02-01 09:05:00.000

LIFT1

10315

7

2010-02-01 09:10:00.000

LIFT2

20510

8

2010-02-01 09:55:00.000

LIFT2

20810

9

2010-02-01 10:00:00.000

LIFT1

10480

10

2010-02-01 10:00:00.000

LIFT2

20885

11

2010-02-01 10:10:00.000

LIFT1

10530

12

2010-02-01 10:15:00.000

LIFT1

10575

13

2010-02-01 11:00:00.000

LIFT1

10725

14

2010-02-01 11:05:00.000

LIFT2

21445

15

2010-02-01 11:05:00.000

LIFT1

10755

16

2010-02-01 11:50:00.000

LIFT1

11295

17

2010-02-01 12:00:00.000

LIFT1

11325


Man kan beräkna förbrukningen genom att ta differensen mellan två avlästa värden. T ex hade LIFT1 en förbrukning på 25 cl mellan kl 08:00 och 08:05. Förbrukningen var då 5 cl per minut.
 

Uppgiften är att beräkna den tidsviktade genomsnittliga förbrukningen, i centiliter per minut, för de 20% perioder som hade den högsta förbrukningen/minut (avrunda antal perioder uppåt till närmaste heltal så det blir t ex 3 perioder om det totalt finns 11 perioder). Om flera perioder har samma förbrukning/minut, så välj de senaste perioderna.

Se exempel nedan för LIFT1.

 

VehicleName

StartTime

EndTime

Consumption

TimeInMinutes

ConsumptionPerMinute

LIFT1

08:00:00

08:05:00

25

5

5

LIFT1

08:05:00

08:15:00

40

10

4

LIFT1

08:15:00

09:05:00

250

50

5

LIFT1

09:05:00

10:00:00

165

55

3

LIFT1

10:00:00

10:10:00

50

10

5

LIFT1

10:10:00

10:15:00

45

5

9

LIFT1

10:15:00

11:00:00

150

45

3,33333333333333

LIFT1

11:00:00

11:05:00

30

5

6

LIFT1

11:05:00

11:50:00

540

45

12

LIFT1

11:50:00

12:00:00

30

10

3

 

Totalt har vi 10 perioder så 20% motsvarar två perioder. De två perioder med högst förbrukning hade 12 cl/minut respektive 9 cl/minut och de hade en varaktighet på 45 respektive 5 minuter.
 

Den tidsviktade genomsnittliga förbrukningen för LIFT1 blir då:

(12 x 45 + 9 x 5) / (45 + 5) = 11,7 cl/minut.

 

Samma beräkning, fast för LIFT2 ger en genomsnittlig förbrukning på 15 cl/minut.
 

Tävlingsuppgiften är att skriva snabbast möjliga T-SQL / SQL CLR lösning för att göra denna beräkning. Vi kommer att provköra era lösningar på indata bestående av cirka 1 miljon rader på en maskin som kör SQL Server 2008 R2 Enterprise Edition och har en quadcore CPU.

Utresultatet skall skrivas till en tabell som heter ConsumptionSummary.

 

VehicleName

Top20PctAveragePerMinute

LIFT1

11,7

LIFT2

15

 
Material

 
Script för att skapa tabellerna: SQLUGChallenge2010Setup.txt
Testdata (cirka 200 000 rader, slumpade): SQLUGChallenge2010.zip

För att läsa in testdata, zippa upp på valfri plats och skriv
BULK INSERT MeterReadings FROM 'Sökväg till filen' WITH (FIRSTROW = 2)

Facit för dessa 200 000 rader.

VehicleName Top20PctAveragePerMinute
LIFT1 8202.18834892846
LIFT2 27949.9640499379
LIFT3 13310.5810794649
LIFT4 19097.1263597138

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å cirka 1 miljon rader. Vi reserverar oss för möjligheten att öka antalet rader med testdata om det skulle krävas för att tävlingen skall bli utslagsgivande.
  • Tävlingen avgörs av en jury som består av Johan Åhlén, Tibor Karaszi och Lars Utterström.
  • Deadline för att komma med tävlingsbidrag är 30 november 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: Fem bästa lösningarna vinner en licens av SQL Source Control
 
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!

 
Nytt inlägg
2010-10-13 16:09
 
Ingen som vågar börja?
 
Nytt inlägg
2010-10-18 14:31
 
Hej!

En fråga: när ni mäter tiden för lösningen, mäter ni då bara tiden för huvudscriptet, eller mäter ni även tiden för setup och uppstädningsscriptet?

Mvh
Steinar

Steinar Andersen SQL Service http://www.sqlservice.se
 
Nytt inlägg
2010-10-18 15:29
 
Vi mäter bara tiden för huvudscriptet.

Mvh
Johan
 
Nytt inlägg
2010-10-26 13:43
 
Nu är det bara 4 dagar kvar...
 
Föregående
 
Nästa
HemHemSQLug.SESQLug.SETävlingarTävlingarSQLug.se challenge 2010SQLug.se challenge 2010


Annons