Tävlingsuppgift 2020

Uppgiften

Med årets SQLUG Challenge byter vi fokus – från att hitta den snabbaste möjliga lösningen till snyggaste lösningen. I år har vi skapat en uppgift som är sprungen ur ett problem som många av oss nog stött på i vårt dagliga arbete.

Uppgiften består i att stämma av en tabell med transaktionsrader mot en saldotabell. I saldona saknas vissa transaktionsrader, ofta flera i kombination, och tävlingsuppgiften är att bestämma vilka dessa transaktioner är. Din kund gör denna avstämning en gång vid varje månadsbokslut och behöver en automatiserad process.

Tekniska förutsättningar och leverabler

Ett enkelt script för att skapa testdata finns i vårt Github-repo. Det är valfritt om du vill använda detta script, och vi förbehåller oss rätten att ändra mängden och karaktären av testdatan i våra tester.

I år kommer vi acceptera lösningar på en eller flera av följande plattformar i Azure:

  • SQL Server
    • Azure SQL Database, alla storlekar
    • SQL Server i en VM, alla publika versioner
    • .NET-assemblies är ej tillåtna
  • Azure Synapse Analytics
  • Cosmosdb
  • Datalake
  • Big Data Cluster
  • Azure Functions
    • PowerShell, Javascript & C#
  • Kafka
  • Redis

Genomgående gäller att du måste använda en publikt tillgänglig version (“public previews” är också tillåtna).

En körning får inte kosta mer än 100 kr, från och med att man sätter upp/startar sin miljö tills man stänger ner/deallokerar. Kostnaden för storage ingår inte i denna begränsning.

För att en lösning ska anses levererad måste en steg-för-steg-instruktion bifogas, som redogör dels för hur man sätter upp och stänger ner lösningen, dels hur man använder den. Hela lösningen ska kunna skapas med ett script (Powershell eller Azure CLI) i en tom Resource Group, vars namn skall kunna sättas i en parameter/variabel. Om lösningen är helt SQL-baserad räcker det med ett SQL-script.

Bedömningskriterier

Bonus ges om instruktionerna kan utföras av receptionisten som sköter IT-driften. ;)

Vår möjlighet att testköra lösningarna kommer vara begränsad. Juryn, som består av SQLUG-styrelsen, kommer bedöma inkomna lösningar efter elegans, prestanda och enkelhet. Juryns beslut går ej att överklaga.

Juryn och dess närstående är utom tävlan. De tre högst rankade bidragen kommer testköras för validering. Vinnaren kommer erbjudas möjlighet att presentera sin lösning på en SQLUG-träff. Årets uppgift är konstruerad av Daniel Hutmacher.

Deadline

Bidrag kan laddas upp på upload.sqlug.se senast 2020-12-28 kl 23:59. Om samma person lämnat flera bidrag räknas det senaste inkomna.

11 tankar om “Tävlingsuppgift 2020

  1. Då det saknas en foreign key mellan Transaktioner och Saldon, kan vi anta att det bara finns några rader i Transaktioner som har motsvarande nyckel {År, Konto, Kst} i Saldon?

    Gilla

  2. Ponera att Saldot är 39 och summan av transaktionerna är 63.

    Jag har transaktioner med följande belopp
    a) 11
    b) 13
    c) 10
    d) 14
    e) 15

    Ska båda svaren ”a och b” samt ”c och d” redovisas som möjliga alternativ för saknade transaktioner?

    Gilla

    • Utmärkt fråga! ”Ett korrekt svar” är tillräckligt bra, dvs om du hittar en kombination av transaktioner som summerar till differensen så är det ett korrekt svar.
      Samma unika transaktionsrad får dock av förklarliga skäl inte tas upp flera gånger.

      Gilla

  3. Gott. Det minskar komplexiteten något.

    Men det är fortfarande ett np-problem, dvs exponentiell komplexitet. Om antaler rader i Transaktioner är (r) blir maximala antalet kombinationer som måste testas 2^r.

    Gilla

  4. Ska alla som har kst som NULL räknas som en och samma nyckel. Alltså, om ett saldo är År=1, Konto=1000, och Kst=NULL, ska alla transaktioner med samma värde räknas till detta? Eller ska vi anse att NULL är okänt och bara strunta i dom?

    Gilla

Skriv något snällt om den här artikeln!

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com-logga

Du kommenterar med ditt WordPress.com-konto. Logga ut /  Ändra )

Google-foto

Du kommenterar med ditt Google-konto. Logga ut /  Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut /  Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut /  Ändra )

Ansluter till %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.