webForumDet fria alternativet

Har jag gjort rätt i min sql?

Databaser & SQL

2 svar · 469 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#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

Medlem sedan aug. 20039 340 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.

Medlem 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...

254 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)