en-USsv-SE

Active Forums

PrevPrev Go to previous topic
NextNext Go to next topic
Last Post 05 Apr 2017 08:24 AM by  stefan gustafsson
SQLug.se Challenge 2017
 63 Replies
Sort:
You are not authorized to post a reply.
Page 1 of 41234 > >>
Author Messages
SwePeso
New Member
New Member
Posts: 67


--
19 Feb 2017 06:47 PM
    Hej! Nu lanseras SQLug.se Challenge 2017. Detta är svenska mästerskapen för T-SQL utvecklare som arrangeras varje år sedan 2010 av användarföreningen SQLUG. Syftet med tävlingen är att lösa en programmeringsuppgift på SQL Server med bäst prestanda. Läs mer och tävla: http://sqlugchallenge.azurewebsites.net/ Frågor om tävlingen ställs i det här forumet. Lycka till!
    Daniel Hutmacher
    New Member
    New Member
    Posts: 17


    --
    23 Feb 2017 01:01 PM
    Först och främst: Kul och utmanande ny utmaning och mycket efterlängtad!

    Här kommer en första batch med frågor:

    * Kan man lita på att PurchaseID är i kronologisk ordning?
    * Måste CustomerID i utdatan vara i någon sorts intakt sekvens, börja på 1 eller liknande? Eller kan det vara precis vilka int-värden som helst?
    * Kan det förekomma att en mailadress eller ett kreditkortsnummer används av olika kunder?
    Daniel
    New Member
    New Member
    Posts: 1


    --
    24 Feb 2017 02:26 PM
    Hej,
    När kan vi räkna med att första test resultaten kommer? Just nu listas 2015s resultat på tävlingssidan.
    JAhlen
    Veteran Member
    Veteran Member
    Posts: 144


    --
    26 Feb 2017 09:29 AM
    Hej Daniel,

    Ja, du kan utgå från att PurchaseID är i kronologisk ordning.
    Det finns inga särskilda krav på numreringen av CustomerID. Det enda viktiga är att det skall gå att använda CustomerID för att knyta ihop alla köp som kommer från samma kund.

    Angående din sista fråga så kan jag bara tipsa om att läsa tävlingssidan noggrant.

    Lycka till!

    MVH
    Johan


    Posted By Daniel Hutmacher on 2017-02-23 01:01
    Först och främst: Kul och utmanande ny utmaning och mycket efterlängtad!

    Här kommer en första batch med frågor:

    * Kan man lita på att PurchaseID är i kronologisk ordning?
    * Måste CustomerID i utdatan vara i någon sorts intakt sekvens, börja på 1 eller liknande? Eller kan det vara precis vilka int-värden som helst?
    * Kan det förekomma att en mailadress eller ett kreditkortsnummer används av olika kunder?

    SwePeso
    New Member
    New Member
    Posts: 67


    --
    26 Feb 2017 10:28 AM
    Jag kommer att presentera en preliminär ställning varje måndag så länge tävlingen pågår. Jag kommer så fort jag hinner att svara på alla som sänder in en lösning om den ger rätt svar eller inte.
    I listan kommer bara de lösningar som ger rätt resultat att redovisas.
    Mikael Eriksson
    New Member
    New Member
    Posts: 12


    --
    27 Feb 2017 09:58 AM
    Hej! Kul med en ny tävling.

    Jag skulle bara vilja verifiera hur det är med matchningen när det gäller "kedjade" förändringar.

    T.ex följande Purchases

    PurchaseID  Date       FirstName       Email           CreditCard
    ----------- ---------- --------------- --------------- ---------------
    1           2016-01-01 Mikael          Email_1         CreditCard_1
    2           2016-02-01 Mikael          Email_3         CreditCard_2
    3           2016-03-01 Mikael          Email_2         CreditCard_1
    4           2016-04-01 Mikael          Email_2         CreditCard_2
     


    Om jag fattat rätt så borde alla ovanstående rader få samma CustomerID eftersom P1 matchar P3 på CreditCard, P3 matchar P4 på Email och P4 matchar P2 på CreditCard.


    SwePeso
    New Member
    New Member
    Posts: 67


    --
    27 Feb 2017 12:53 PM
    Du har rätt i att det blir samma CustomerID till slut. Glöm bara inte bort tidsaspekten.
    Mikael Eriksson
    New Member
    New Member
    Posts: 12


    --
    27 Feb 2017 01:02 PM
    Ok, tack. Jag missade detta i beskrivningen "Matchning skall göras mot kundernas alla tidigare köp"

    Mikael Eriksson
    New Member
    New Member
    Posts: 12


    --
    27 Feb 2017 01:11 PM
    I mitt exempel så skulle resultatet alltså bli

    PurchaseID  CustomerID  
    1                    1
    2                   2
    3                   1
    4                   1 eller 2
     


    P2 får ett eget CustomerID eftersom det inte finns någon tidigare match.
    Spelar det någon roll om man väljer att match P4 mot P3 eller P2.

    PS: Det finns ett sådant exempel i testdata där man måste göra ett val.
    stefan gustafsson
    New Member
    New Member
    Posts: 29


    --
    27 Feb 2017 02:34 PM
    Hej

    Som vanligt en mycket intressant och bra tävlingsuppgift. Bra jobbat!

    Jag tycker Micke har en mycket bra fråga.

    Jag tolkar uppgiften som att när P4 dyker upp så skall man inse att P2 och P3 var samma kund och därmed se till att alla P1-P4 får samma kundnummer.

    Men om så är fallet så förstår jag inte alls vad Peso menar med "Glöm bara inte bort tidsaspekten". Som jag ser det så har tiden ingen betydelse alls.

    Kan vi kanske få en tydligare förklaring på hur det är tänkt?
    SwePeso
    New Member
    New Member
    Posts: 67


    --
    27 Feb 2017 09:56 PM

    Spelar det någon roll om man väljer att match P4 mot P3 eller P2.

    Ja, definitivt spelar det roll.

    Jag kan inte hjälpa dig mer än så ännu, det är för tidigt i tävlingen.
    SwePeso
    New Member
    New Member
    Posts: 67


    --
    27 Feb 2017 10:07 PM

    Men om så är fallet så förstår jag inte alls vad Peso menar med "Glöm bara inte bort tidsaspekten". Som jag ser det så har tiden ingen betydelse alls.

    Se på Mickes testdata om det varit i en annan ordning

    2 2016-02-01 Mikael Email_3 CreditCard_2 -> C1
    4 2016-04-01 Mikael Email_2 CreditCard_2 -> C1 (pga fnamn och cc)
    3 2016-03-01 Mikael Email_2 CreditCard_1 -> C1 (pga fnamn och epost)
    1 2016-01-01 Mikael Email_1 CreditCard_1 -> C1 (pga fnamn och cc)


    Gör du om ordningen på det sättet så blir det uppenbart att alla köp är gjorda av samma kund.
    I vår testdata har vi X antal rader för Y antal månader för Z antal år.

    Du får gärna skriva en algoritm som arrangerar om alla köpen på alla permutationer som finns men det tar nog längre tid än att kontrollera köpen i kronologisk ordning.
    Tänk på att kreditkort kan delas av gifta personer och dessa kan skilja sig och byta efternamn samma månad. Då kan antingen båda makarna få nya kreditkort eller så fortsätter den ena att använda kortet och den andra makan får ett nytt som han eller hon använder för att dels betala sin egen prenumeration samt sitt barns eller syskons prenumeration.

    Det *kan* bli olika kundnummer beroende på vart du börjar titta och hur du arrangerar om raderna för att få ihop det.
    stefan gustafsson
    New Member
    New Member
    Posts: 29


    --
    28 Feb 2017 08:39 AM
    @Peter

    Jag tycker dina förklaringar är svåra att förstå.

    Kanske det går bättre om jag ställer en mycket rak fråga:

    Antag att vi har mickes testdata:

    1 2016-01-01 Mikael Email_1 CreditCard_1
    2 2016-02-01 Mikael Email_3 CreditCard_2
    3 2016-03-01 Mikael Email_2 CreditCard_1
    4 2016-04-01 Mikael Email_2 CreditCard_2

    Hur ser det korrekta svaret ut med denna data?

    PurchaseID CustomerID
    1 1
    2 1
    3 1
    4 1

    eller

    PurchaseID CustomerID
    1 1
    2 2
    3 1
    4 1

    eller

    PurchaseID CustomerID
    1 1
    2 2
    3 1
    4 2

    Något av alternativen måste väl vara rätt (dvs godkänt i tävlingen) och de andra två fel, eller hur?

    /SG
    Henrik Linder
    New Member
    New Member
    Posts: 8


    --
    01 Mar 2017 11:14 PM
    Hej
    Min tolkning av instruktionerna är att din indata är ogiltig; "Du kan utgå från att matchningarna ovan aldrig ger några falska träffar. Varje godkänd matchning innebär att det måste vara samma "CustomerID" på köpen." står det.
    JAhlen
    Veteran Member
    Veteran Member
    Posts: 144


    --
    02 Mar 2017 09:46 AM

    Posted By Micke on 2017-02-27 01:11
    I mitt exempel så skulle resultatet alltså bli

    PurchaseID  CustomerID  
    1                    1
    2                   2
    3                   1
    4                   1 eller 2
     


    P2 får ett eget CustomerID eftersom det inte finns någon tidigare match.
    Spelar det någon roll om man väljer att match P4 mot P3 eller P2.

    PS: Det finns ett sådant exempel i testdata där man måste göra ett val.


    Hej Micke,

    Vad har du för exempel i testdata på att man måste göra ett val?

    MVH
    Johan
    JAhlen
    Veteran Member
    Veteran Member
    Posts: 144


    --
    02 Mar 2017 09:56 AM

    Posted By stefan gustafsson on 2017-02-28 08:39
    @Peter

    Jag tycker dina förklaringar är svåra att förstå.

    Kanske det går bättre om jag ställer en mycket rak fråga:

    Antag att vi har mickes testdata:

    1 2016-01-01 Mikael Email_1 CreditCard_1
    2 2016-02-01 Mikael Email_3 CreditCard_2
    3 2016-03-01 Mikael Email_2 CreditCard_1
    4 2016-04-01 Mikael Email_2 CreditCard_2

    Hur ser det korrekta svaret ut med denna data?

    PurchaseID CustomerID
    1 1
    2 1
    3 1
    4 1

    eller

    PurchaseID CustomerID
    1 1
    2 2
    3 1
    4 1

    eller

    PurchaseID CustomerID
    1 1
    2 2
    3 1
    4 2

    Något av alternativen måste väl vara rätt (dvs godkänt i tävlingen) och de andra två fel, eller hur?

    /SG


    Hej Stefan!

    Mycket bra fråga. Vi hade diskussioner om just sådana här fall, och en del andra ännu klurigare kombinationer, när vi konstruerade tävlingsuppgiften. Vi bestämde oss till sist för att se till att indata inte innehåller sådana.

    Så - svaret är att detta är otillåten indata...

    Om det ändå (enligt Micke) har slunkit igenom ett sådant fall i vår exempeldata så skall vi naturligtvis omedelbart rätta till det. Ni kan vara helt säkra på att vi inte har några sådana fall i riktiga testerna.

    MVH
    Johan
    stefan gustafsson
    New Member
    New Member
    Posts: 29


    --
    02 Mar 2017 11:18 AM
    Hej Johan

    Tack för ett tydligt svar! Då förstår jag bättre hur ni menar och varför ni pratar så mycket om vilken ordning inköpen kommer i.

    Jag tycker dock att det är synd att ni har förenklat problemet genom att kräva att indatan ser ut på ett visst sätt. Det allmänna problemet där indatan kan komma i vilken ordning som helst är enligt min uppfattning klart intressantare. (det rätta svaret med Mickes exempel skall förstås i så fall vara att alla inköpen är gjorda av samma kund)

    I verkligheten har man ju dessutom inte möjligheten att förbjuda kunder att bete sig hur som helst.
    Mickes testdata skulle mycket väl kunna förekomma i verkligheten.

    Men då får jag väl se om det går att skriva om min allmänna lösning så att den utnyttjar det förenklade problemet för att gå fortare

    Lite synd tycker jag.

    Jag tycker dock fortfarande att årets uppgift är mycket bra!

    Den är dessutom mycket realistisk. Faktum är att jag har jobbat med exakt detta problem åt en kund alldeles nyligen - dock utan restriktionen på att indatan måste komma i en viss ordning

    /SG
    Mikael Eriksson
    New Member
    New Member
    Posts: 12


    --
    02 Mar 2017 11:18 AM


    Hej Micke,

    Vad har du för exempel i testdata på att man måste göra ett val?

    MVH
    Johan


    Hej Johan!

    Åkte på pumpen när det gällde en person i testdata men efter att ha stirrat lite mer på det och sovit en stund så visade det sig att det var fel i hur jag tänkte (och kodade) och inte i testdata.

    /Micke



    Jonas
    New Member
    New Member
    Posts: 7


    --
    02 Mar 2017 02:22 PM
    Från testdata:
    PurchaseID Date FirstName LastName Email StreetAddress ZipCode CreditCard
    5 2015-01-07 Anders Lind u626134860@hotmail.com Lindv+ñgen 197 43773 0244-9047-7464-0736
    72 2015-09-16 Anders Lind u97807691@gmail.com Tallstigen 123 70719 3051-4978-1594-1235
    103 2015-12-28 Anders Lind u97807691@gmail.com Tallstigen 123 70719 0244-9047-7464-0736

    Är väll ett exemple på detta. PurchaseID 5 och 72, blir två kunder. När man tittar på 103, får man träff på två olika.

    Vill för övrigt tacka för en kul tävling! Lätt värt att prioritera bort lite sömn.
    stefan gustafsson
    New Member
    New Member
    Posts: 29


    --
    02 Mar 2017 03:28 PM

    Posted By Jonas on 2017-03-02 02:22
    Från testdata:
    PurchaseID Date FirstName LastName Email StreetAddress ZipCode CreditCard
    5 2015-01-07 Anders Lind u626134860@hotmail.com Lindv+ñgen 197 43773 0244-9047-7464-0736
    72 2015-09-16 Anders Lind u97807691@gmail.com Tallstigen 123 70719 3051-4978-1594-1235
    103 2015-12-28 Anders Lind u97807691@gmail.com Tallstigen 123 70719 0244-9047-7464-0736

    Är väll ett exemple på detta. PurchaseID 5 och 72, blir två kunder. När man tittar på 103, får man träff på två olika.

    Vill för övrigt tacka för en kul tävling! Lätt värt att prioritera bort lite sömn.


    Nej

    Detta är inget problem om man processar all data i ordning. Du har missat purchase 51.

    5 2015-01-07 Anders Lind u626134860@hotmail.com Lindvägen 197 43773 0244-9047-7464-0736
    51 2015-06-30 Anders Lind u97807691@gmail.com Lindvägen 197 43773 0244-9047-7464-0736
    72 2015-09-16 Anders Lind u97807691@gmail.com Tallstigen 123 70719 3051-4978-1594-1235
    103 2015-12-28 Anders Lind u97807691@gmail.com Tallstigen 123 70719 0244-9047-7464-0736

    51 -> 5 via cc
    72 -> 51 via email
    103 -> 51 via email
    You are not authorized to post a reply.
    Page 1 of 41234 > >>