updating a table using the max date and values from another table using sql in ms-access -


i have following scenario: want update tableb using rating tablea. challenge is: ratings change randomly , when updating tableb's records, have take in account date of match , if rating changed let's on tuesday , game on monday before, want rating previous rating not latest one.

#table a: contains rating of players, changes randomly @ date depending #on drop of form players    pid| rating | datechange  | 1  |    2   | 10-may-2014 | 1  |    4   | 20-may-2015 | 1  |   20   | 1-june-2015 | 2  |    4   | 1-april-2014| 3  |    4   | 5-april-2014| 2  |    3   | 3-may-2015  |  #table b: contains match sheets. every player has different match sheet #and plays different dates.  msid | pid  | matchdate    | win | rating |  1   |  2   | 10-may-2014  |  no |    0   |  2   |  1   | 15-may-2015  | yes |    0   |  3   |  3   | 10-apr-2014  |  no |    0   |  4   |  1   | 21-apr-2015  | yes |    0   |  5   |  1   | 3-june-2015  | yes |    0   |  6   |  2   | 5-may-2015   |  no |    0   |  #i trying achieve running ms-access query: want #every players rating @ time match played not current #rating.   msid | pid  | matchdate    | rating |  1   |  2   | 10-may-2014  |    4   |  2   |  1   | 15-may-2015  |    2   |  3   |  3   | 10-apr-2014  |    4   |  4   |  1   | 21-apr-2015  |    2   |  5   |  1   | 3-june-2015  |    20  |  6   |  2   | 5-may-2015   |    3   | 

i tried following code:

update [b-table] wdev set wdev.rating = ( select b.msid, b.pid, b.matchdate, a.rating rating  [b-table] b inner join [a-table]   on b.pid = a.pid inner join (        select max(y.datechange) mdc, y.pid, z.matchdate   [b-table] z   inner join [a-table] y    on z.pid = y.pid   , y.datechange <= z.matchdate   group y.pid, z.matchdate) c   on c.mdc = a.datechange  , a.pid = c.pid  , b.matchdate = c.matchdate) , b.msid = wdev.msid 

sqlfiddle database schema

in summary: want rating corresponding max date change on or before date of match.

i think want correlated subquery:

update [b-table] b     set rating = (select top 1 rating                   [a-table]                   a.pid = b.pid ,                         a.datechange <= b.matchdate                   order a.datechange desc                  ) ; 

note: because of way ms access processes top, subquery return multiple rows in event of tie. normal solution include additional key value in order by, prevent ties. however, there not seem unique key in "a" table.


Comments

Popular posts from this blog

yii2 - Yii 2 Running a Cron in the basic template -

asp.net - 'System.Web.HttpContext' does not contain a definition for 'GetOwinContext' Mystery -

mercurial graft feature, can it copy? -