John-B Skrevet 13. november 2008 Del Skrevet 13. november 2008 (endret) Hente ut daglige inntekter: select dayofmonth(`PaidDate`) as Dag, count(*) as Antall, SUM(Amount) as 'Inntekter' from orders where MONTH(`PaidDate`) = MONTH(NOW()) AND Currency = 'GBP' group by dayofmonth(`PaidDate`) Problemet med spørringen over er at dersom en dag ikke har noen rader hvor Currency er GBP, vil hele dagen utelates fra resultatet. Dvs, jeg får en oversikt over dager hvor enkelte dager gjerne er utelatt helt. Jeg ønsker en full utskrift av alle dagene i måneden, men det skal selvsagt være 0 de dagene Currency ikke er GBP. Noen som har peiling på hvordan dette løses best? Endret 13. november 2008 av John-B Lenke til kommentar
kaffenils Skrevet 14. november 2008 Del Skrevet 14. november 2008 Du må bruke en "hjelpe"-tabell som inneholder en rad pr dag for alle dagene i måneden du skal kjøre spørringen for. Du kan enten lage en permanent tabell med en kolonne 'dato' som inneholder en rad pr dag et stykke frem i tid. Du kan også la denne tabellen være en temporær tabell, hvis MySql støtter dette da. Spørringen vil da spørre fra denne datotabellen og left joine Inntekter. Lenke til kommentar
blackbrrd Skrevet 14. november 2008 Del Skrevet 14. november 2008 (endret) select dayofmonth(`PaidDate`) as Dag, count(*) as Antall, SUM(CASE WHEN Currency = 'GBP' THEN Amount ELSE 0 END) as 'Inntekter' from orders where MONTH(`PaidDate`) = MONTH(NOW()) group by dayofmonth(`PaidDate`) Endret 14. november 2008 av blackbrrd Lenke til kommentar
Manfred Skrevet 14. november 2008 Del Skrevet 14. november 2008 Jeg ville, som kaffenils sier, laget en "avregningstabell". Mye kjappere å slå opp i om den brukes flere ganger senere også Lenke til kommentar
kaffenils Skrevet 14. november 2008 Del Skrevet 14. november 2008 Poenget med hjelpetabellen er å få med datoer i resultatet hvor det ikke finnes noen korresponderende rader i "orders" tabellen, verken med GBR eller annen valuta. Lenke til kommentar
John-B Skrevet 15. november 2008 Forfatter Del Skrevet 15. november 2008 select dayofmonth(`PaidDate`) as Dag, count(*) as Antall, SUM(CASE WHEN Currency = 'GBP' THEN Amount ELSE 0 END) as 'Inntekter'from orders where MONTH(`PaidDate`) = MONTH(NOW()) group by dayofmonth(`PaidDate`) Tusen Takk! Det var akkurat det jeg skulle spørre om - om ikke det var en mulighet for en slags "IF-setning" i SUM. Så vidt jeg kan se fungerer denne spørringen tilstrekkelig! Poenget med hjelpetabellen er å få med datoer i resultatet hvor det ikke finnes noen korresponderende rader i "orders" tabellen, verken med GBR eller annen valuta. Takk for forslaget - førsteposten var kanskje en smule misvisende, siden det i mitt nåværende tilfelle ikke gjør noe om en dag mangler, så lenge den mangler i alle currencies. Er bare et veldig simpelt script jeg jobber med nå - tror jeg ser på ditt forslag når jeg skal lage noe skikkelig ut av det. Å ha støtte for flere valutaer ble litt mindre programmeringsvennlig enn først antatt Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå