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

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -