sql server - Using sql average with date and time -
i have large horse race database want interrogate.
what create new column (average turf speed) find horse’s average speed (over last 1 year only) prior day’s race , specific race type (turf).
i used in excel using averageifs formular data program freeze , hang time im planning make move sql.
i’ve taken small sample , simplified demonstration purposes, know contain lots of nulls understand issue.
so example if @ aazif in last race on 21-05-2015 average speed prior days race ignore 1st race because out of date range , wrong race type take 70 , 40 2nd , 3rd race give average of 55
date , time horse race type speed rating average turf speed 10/05/2013 14:00 aazif aw 60 10/05/2013 14:00 bix aw 50 10/05/2013 14:00 camelot aw 40 15/08/2014 15.00 aazif turf 70 15/08/2014 15.00 bix turf 60 15/08/2014 15.00 camelot turf 50 17/05/2015 13.00 aazif turf 40 17/05/2015 13.00 bix turf 30 17/05/2015 13.00 camelot turf 20 21/05/2015 14.00 aazif turf 50 21/05/2015 14.00 bix turf 40 21/05/2015 14.00 camelot turf 30
i'm not sure definition of "large database" large database engine. more efficient left join, give difficult criteria of "prior day’s race" makes difficult write way. have 1 below gives want, might have performance problems because subquery makes last column ([prev speed rating]) fire each row. if slow, first try putting on compound index made out of columns used in clause.
create view vhorseresults select a.horse, a.[race type], a.[speed rating], a.[date , time], (select avg(b.[speed rating]) races b a.horse = b.horse , a.[race type] = b.[race type] , a.[date , time] > b.[date , time] , b.[date , time] >= dateadd(year, -1, getdate()) [prev speed rating] races -- show 1 years worth of data. select * vhorseresults getdate() >= datediff(year,-1,[date , time])
Comments
Post a Comment