Potresti provare questo:
FROM workdone
LEFT JOIN staffcost ON workdone.date >= MAKEDATE(staffcost.costyear, 1)
AND workdone.date < MAKEDATE(staffcost.costyear+1, 1)
Ciò consentirà l'utilizzo di un indice su workdone.date
per cercare le date comprese tra il primo giorno del costyear
fino al primo giorno di costyear+1
, escluso .
In generale, questo tipo di ricerca per intervalli può sfruttare indici in cui funzioni (come YEAR(datestamp)
) non può.