webForumDet fria alternativet

Har jag gjort rätt i min sql?

2 svar · 469 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

Jag skull vara väldigt tacksam om ni ville se om jag har gjort rätt i min sql för
att räknar timmar.

SELECT 
Sum(t_tidsrapportPerson.fullTid) AS total, 
t_person.namn, Format(Date(),'mmmm') AS Manad
FROM t_tidsrapportPerson 
INNER JOIN (t_person INNER JOIN t_tidsRapport 
ON t_person.personId = t_tidsRapport.personId) 
ON t_tidsrapportPerson.rappPersonId = t_tidsRapport.rappPersonId
GROUP BY t_person.namn, Format(Date(),'mmmm')
HAVING (((Format(Date(),'mmmm'))='april'))
ORDER BY t_person.namn;

.. när jag kollar resultatet så ser det hyffsat ut. :e

nitro2k01Medlem sedan aug. 20039 342 inlägg
#2
  1. Format(Date(),'mmmm') ser mysko ut. Borde du inte skicka ett kolumnnamn som parameter till Date()?
  2. Jag tror du har lite prestanda att vinna på att köra jämförelsen eller grupperingen över Month(nån_kolumn) (Beror på hur smart databasen är...)
  3. Jag tror även du har lite prestanda att vinna på att filtrera ut så mycket du kan med en WHERE-sats innan din HAVING-sats, eftersom det kan vara så att alla rader måste evalueras temporärt innan grupperingen annars. (Igen, detta beror på hur smart din databas-motor är...)

P.S., jag tog mig friheten att byta [kod] mot [highlight=sql] i ditt inlägg så att koden blir färgkodad och mer läsbar.

sawMedlem sedan mars 20011 880 inlägg
#3

Hej.
Jag glömde skriva in att det är acces databas.
Format(Date(),'mmmm') fungerar mot förmodan hyffsat bra, då den skall jämföras med
resultatet ifrån en dropdown listbox.
Resten av vad du säger låter väldigr inteligent och bra, men där står jag med min
tvättade hals...
Vad jag därimot kom på är att jag gör fel, den skall ju räkna tid och då blir min sql galen...

124 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)