sqlms-access

Query to Find Adjacent Records in Access 2016


I have a table with a field called Result that contains values that can be anywhere between 1 and 100.

The table also contains a Date/Time field and is sorted from oldest to newest.

I want to be able to return adjacent records that have a Result of less than 3.

So, I need to first find a record with a Result that is less than 3 then check if the next records also have a Result of less than 3. If they do these records should be returned.

There may be no such adjacent records or there may be multiple records that meet this criteria.

Is this possible?

Edit to show raw data:

EVENT_ID MENU_HINT EVENT_NAME EVENT_DT SELECTION_ID SELECTION_NAME WIN_LOSE RESULT PPWAP MORNINGWAP PPMAX PPMIN IPMAX IPMIN MORNINGTRADEDVOL PPTRADEDVOL IPTRADEDVOL
177429103 GB / Warw 31st Dec 2m3f Nov Hcap Hrd 31/12/2020 12:16 24258495 Durouyn 0 3.35 3.788495864 5.38488519 8.2 3.35 1000 3 11733.86 122639.8 34646.44
177429358 GB / Ling 31st Dec 5f Hcap 31/12/2020 12:25 18749440 Recon Mission 1 2.690970585 2.971591572 3.333867707 3.7 2.62 2.62 1.01 10373.34 148069.5 80777.62
177429108 GB / Warw 31st Dec 2m5f Nov Hrd 31/12/2020 12:50 24173821 Hunny Moon 0 2.447464433 2.11324847 2.163378525 2.44 2.04 1000 1.19 11813.96 255912.18 125384.84
177429363 GB / Ling 31st Dec 1m4f Hcap 31/12/2020 13:00 15836857 Furzig 1 3.854984987 3.902990521 3.600931943 4.3 3.3 4.8 1.01 8973.44 143838.1 77024.42
177429113 GB / Warw 31st Dec 2m Hcap Chs 31/12/2020 13:20 21621736 Clondaw Storm 0 3.6 3.743201097 4.742622035 5.3 3.35 1000 3.5 2816.16 189308.52 24052.28
177429368 GB / Ling 31st Dec 1m Nursery 31/12/2020 13:30 16246360 Crane 1 4.57347948 5.497304184 8.064209052 13.5 4.3 9 1.01 2381.6 80916.5 56471.38
177429118 GB / Warw 31st Dec 3m Hcap Chs 31/12/2020 13:50 12139570 Western Climate 1 5.156135933 5.604728454 8.718328245 11 4.7 36 1.01 1533.68 66886.62 113571.44
177429373 GB / Ling 31st Dec 1m Hcap 31/12/2020 14:00 25106015 Fox Duty Free 1 1.822597055 1.653244765 1.834082867 1.86 1.53 2.18 1.01 9200.44 294331.6 133141.52
177455809 GB / Newc 31st Dec 1m2f Mdn Stks 31/12/2020 14:15 36868924 Sea La Rosa 0 1.53 1.543693353 1.514527435 1.71 1.44 1000 1.17 9156.44 414060.88 87693.56
177429123 GB / Warw 31st Dec 3m2f Hcap Hrd 31/12/2020 14:25 16570526 Mr Washington 1 2.887501832 3.033127147 3.416500781 3.7 2.8 12.5 1.01 3951.08 267753.32 222510.44
177429378 GB / Ling 31st Dec 7f Hcap 31/12/2020 14:35 26817851 Queens Course 0 3.2 3.090787978 2.725768785 3.35 2.56 1000 2.74 13746.16 191223.12 33258.54
177455814 GB / Newc 31st Dec 7f Nursery 31/12/2020 14:50 28583483 Patsy Fagan 0 3.6 3.871536732 5.026440395 5.5 3.5 1000 3.05 821.96 129773.56 12941.11
177429128 GB / Warw 31st Dec 2m4f Hcap Chs 31/12/2020 14:55 27358555 Larcadio 0 5.1 5.516270157 7.542009007 12.78 4.7 1000 5 2973.82 125064.34 14205.61
177429383 GB / Ling 31st Dec 7f Nov Stks 31/12/2020 15:05 35988539 Vunipola 0 4.163666731 4.865682954 6.290553968 6.63 4.09 1000 3.6 1566.86 90363.92 7276.22
177455819 GB / Newc 31st Dec 7f Hcap 31/12/2020 15:20 17896417 The Great Heir 0 4.633138814 4.98396497 5.033891895 6.4 4.4 1000 2.02 2751.64 89814.54 20710.14
177429133 GB / Warw 31st Dec 2m NHF 31/12/2020 15:25 36643074 Shearer 1 1.734505856 1.642204062 1.648608997 1.79 1.52 2.4 1.01 6611.44 389837.24 220416.46
177429388 GB / Ling 31st Dec 6f Hcap 31/12/2020 15:35 23983758 Come On Girl 1 4.036457882 4.226797676 5.141209402 5.3 3.95 6.2 1.01 2758.88 158780.52 68546.8
177455824 GB / Newc 31st Dec 5f Hcap 31/12/2020 15:50 28554376 The Mackem Torpedo 0 4.590142598 4.354303892 4.018987238 4.7 3.95 1000 4.5 1625.74 135903 6791.62
177455829 GB / Newc 31st Dec 1m Hcap 31/12/2020 16:20 12722816 Vive La Difference 0 4.662202966 4.069578956 3.447760364 4.6 3.4 1000 2.5 2542.4 142089.24 22386.43
177455834 GB / Newc 31st Dec 6f Hcap 31/12/2020 16:50 24560233 Tyche 0 4.468887453 4.409369153 3.73378774 4.9 3.6 1000 3.75 2678.94 199866.86 8157.5
177455839 GB / Newc 31st Dec 6f Hcap 31/12/2020 17:20 21809957 Firsteen 0 2.76 3.297405269 4.273854189 4.8 2.62 1000 1.98 1630.52 206865.74 19490.28
177455844 GB / Newc 31st Dec 5f Nursery 31/12/2020 17:50 10108658 It Just Takes Time 1 2.835988231 2.930861482 3.51783407 3.7 2.68 8 1.01 3203.46 303616.28 71088.54
177452819 GB / Sthl 1st Jan 1m Hcap 01/01/2021 12:05 24354064 Jump The Gun 0 1.943695456 2.106938051 2.212582243 2.75 1.93 1000 1.73 20918.4 247224.48 34151.63
177452824 GB / Sthl 1st Jan 1m Hcap 01/01/2021 12:40 17784369 Geography Teacher 0 3.386219187 4.094098153 4.019062448 4.9 2.96 1000 2.98 3835.16 135242.08 18892.67
177450972 GB / Muss 1st Jan 1m7f Juv Hrd 01/01/2021 12:45 26781759 Fiveandtwenty 1 1.303352215 1.319167666 1.345312394 1.46 1.28 1.29 1.01 32274.92 444260.44 153330.38
177452829 GB / Sthl 1st Jan 7f Hcap 01/01/2021 13:15 24434010 Stone Soldier 0 2.549774392 2.794154799 2.617939611 3.1 2.24 1000 2.6 5205 321055.3 26159.48
177450977 GB / Muss 1st Jan 2m4f Hcap Hrd 01/01/2021 13:20 17336818 Sebastopol 0 3.929666003 4.081355067 4.949413661 6.4 3.8 1000 2.54 21569.96 198160.34 52413.5
177452834 GB / Sthl 1st Jan 5f Hcap 01/01/2021 13:50 18267122 Thegreatestshowman 1 2.063934555 2.377164912 3.396825984 3.6 1.95 2.38 1.01 3969.34 354445.76 98256.96
177450982 GB / Muss 1st Jan 1m7f Hcap Hrd 01/01/2021 13:55 21566171 Rosie And Millie 0 3.724492471 4.147640855 4.350885597 6.17 3.7 1000 1.9 17416.7 177567.04 50688.77
177452839 GB / Sthl 1st Jan 5f Hcap 01/01/2021 14:25 11905513 Mulzim 0 2.970033644 2.81744235 3.279075198 3.69 2.66 1000 1.15 4101.28 286360.76 44772.63
177450987 GB / Muss 1st Jan 3m Hcap Chs 01/01/2021 14:30 11835257 Eagle Ridge 1 3.3 3.439516592 3.816612889 4.11 3.15 5.1 1.22 3783.72 155260.58 198310.06
177452844 GB / Sthl 1st Jan 5f Nov Stks 01/01/2021 15:00 6734265 Silent Queen 1 2.112527135 2.034570227 2.363084285 2.5 1.91 2.08 1.01 6776.64 557441.78 77038.62
177450992 GB / Muss 1st Jan 2m4f Hcap Chs 01/01/2021 15:05 18443373 Red Risk 0 6.4 7.754651066 8.574540985 10.5 6.2 1000 2.6 4665.12 91115.26 22514.2
177452849 GB / Sthl 1st Jan 1m3f Hcap 01/01/2021 15:30 13164979 Mr Carbonator 1 4.862029739 4.880893131 5.386305365 7.2 4.3 13 1.01 2191.3 118629.32 73162.24
177450997 GB / Muss 1st Jan 3m Hcap Hrd 01/01/2021 15:35 8427444 Arnica 0 4.949186067 4.859721673 6.046290481 8.15 4.4 1000 4.8 4594.06 82383.08 18082.52
177482329 GB / Ling 2nd Jan 1m2f Hcap 02/01/2021 11:30 16934 One To Go 0 4.647552172 4.247650843 3.744785965 5.4 2.3 1000 4.2 20388.5 93931.36 16765.68
177482337 GB / Ling 2nd Jan 1m2f Hcap 02/01/2021 12:00 35537114 Coupe De Champagne 1 2.759257517 2.691724907 2.688327131 3.1 2.66 4.8 1.01 5364.58 172705.28 87986.16
177482285 GB / Sand 2nd Jan 2m Juv Hrd 02/01/2021 12:05 28648727 Hudson De Grugy 1 1.652021681 1.580651241 1.610294187 1.7 1.47 5.1 1.01 38845.94 297948.06 198330.6
177482345 GB / Ling 2nd Jan 1m Mdn Stks 02/01/2021 12:35 37389223 Abrag 0 3.014364274 2.92708331 2.954901994 3.85 2.52 1000 2.66 10421.1 149521.56 16386.74
177482290 GB / Sand 2nd Jan 2m4f Listed Mares Hrd 02/01/2021 12:40 12765436 Stormy Ireland 0 2.450297083 2.21840097 2.105412255 2.4 1.99 1000 1.13 31835.58 237664.44 151548.74
177482367 GB / Ling 2nd Jan 1m Hcap 02/01/2021 13:10 22475046 Kodiac Harbour 0 4.161454727 4.104053582 4.010289186 4.5 3.8 1000 4.3 6452.88 124187.18 14029.48
177482295 GB / Sand 2nd Jan 2m4f Hcap Chs 02/01/2021 13:15 18416742 Destinee Royale 0 2.581778427 2.534929323 2.62282913 3.25 2.4 1000 1.61 14468.6 285577.14 71690.41
177482388 GB / Ling 2nd Jan 7f Hcap 02/01/2021 13:45 21039777 Merweb 0 4.214427037 3.716077346 4.157082886 4.4 3.7 900 3.5 2075.5 100099.42 23796.07
177482300 GB / Sand 2nd Jan 1m7f Hcap Chs 02/01/2021 13:50 12458428 Ibleo 1 2.771342189 2.865297244 3.093340465 3.5 2.72 12 1.01 57468.66 468915.94 184558.08
177482395 GB / Ling 2nd Jan 6f Hcap 02/01/2021 14:20 28659808 Rohaan 0 2.44 2.44365781 2.795702203 3 2.36 1000 2.48 6884.58 214335.08 45763.14
177482305 GB / Sand 2nd Jan 2m Grd1 Nov Hrd 02/01/2021 14:25 11144887 Metier 1 2.98 2.623330988 2.336856915 3.05 2.16 3.3 1.01 68284.7 569650.62 223772.66
177482403 GB / Ling 2nd Jan 6f Nov Stks 02/01/2021 14:55 35856072 Hidden Breeze 1 1.899786009 1.700147533 1.695047545 1.93 1.56 3.15 1.01 5141.26 397544.9 115253.84
177482310 GB / Sand 2nd Jan 3m Hcap Chs 02/01/2021 15:00 10464730 Potters Legend 0 8.945083598 7.487055028 8.587091835 11.38 6.4 1000 6 10048.92 148817.98 26323.38
177482420 GB / Ling 2nd Jan 5f Hcap 02/01/2021 15:30 11137751 Super Julius 0 2.98107922 3.109512581 3.884551246 6 2.96 1000 2.92 3995.54 196505.52 17391.92
177482315 GB / Sand 2nd Jan 2m Hcap Hrd 02/01/2021 15:35 17094738 Monsieur Lecoq 0 3.843156747 3.294978739 4.176691124 5.5 3.3 1000 3.7 17716.24 234519.22 47568.92

And expected result:

EVENT_ID MENU_HINT EVENT_NAME EVENT_DT SELECTION_ID SELECTION_NAME WIN_LOSE RESULT PPWAP MORNINGWAP PPMAX PPMIN IPMAX IPMIN MORNINGTRADEDVOL PPTRADEDVOL IPTRADEDVOL
177429358 GB / Ling 31st Dec 5f Hcap 44196.51736 18749440 Recon Mission 1 2.690970585 2.971591572 3.333867707 3.7 2.62 2.62 1.01 10373.34 148069.5 80777.62
177429108 GB / Warw 31st Dec 2m5f Nov Hrd 44196.53472 24173821 Hunny Moon 0 2.447464433 2.11324847 2.163378525 2.44 2.04 1000 1.19 11813.96 255912.18 125384.84
177429373 GB / Ling 31st Dec 1m Hcap 44196.58333 25106015 Fox Duty Free 1 1.822597055 1.653244765 1.834082867 1.86 1.53 2.18 1.01 9200.44 294331.6 133141.52
177455809 GB / Newc 31st Dec 1m2f Mdn Stks 44196.59375 36868924 Sea La Rosa 0 1.53 1.543693353 1.514527435 1.71 1.44 1000 1.17 9156.44 414060.88 87693.56
177429123 GB / Warw 31st Dec 3m2f Hcap Hrd 44196.60069 16570526 Mr Washington 1 2.887501832 3.033127147 3.416500781 3.7 2.8 12.5 1.01 3951.08 267753.32 222510.44
177455839 GB / Newc 31st Dec 6f Hcap 44196.72222 21809957 Firsteen 0 2.76 3.297405269 4.273854189 4.8 2.62 1000 1.98 1630.52 206865.74 19490.28
177455844 GB / Newc 31st Dec 5f Nursery 44196.74306 10108658 It Just Takes Time 1 2.835988231 2.930861482 3.51783407 3.7 2.68 8 1.01 3203.46 303616.28 71088.54
177452819 GB / Sthl 1st Jan 1m Hcap 44197.50347 24354064 Jump The Gun 0 1.943695456 2.106938051 2.212582243 2.75 1.93 1000 1.73 20918.4 247224.48 34151.63
177450972 GB / Muss 1st Jan 1m7f Juv Hrd 44197.53125 26781759 Fiveandtwenty 1 1.303352215 1.319167666 1.345312394 1.46 1.28 1.29 1.01 32274.92 444260.44 153330.38
177452829 GB / Sthl 1st Jan 7f Hcap 44197.55208 24434010 Stone Soldier 0 2.549774392 2.794154799 2.617939611 3.1 2.24 1000 2.6 5205 321055.3 26159.48
177482337 GB / Ling 2nd Jan 1m2f Hcap 44198.5 35537114 Coupe De Champagne 1 2.759257517 2.691724907 2.688327131 3.1 2.66 4.8 1.01 5364.58 172705.28 87986.16
177482285 GB / Sand 2nd Jan 2m Juv Hrd 44198.50347 28648727 Hudson De Grugy 1 1.652021681 1.580651241 1.610294187 1.7 1.47 5.1 1.01 38845.94 297948.06 198330.6
177482300 GB / Sand 2nd Jan 1m7f Hcap Chs 44198.57639 12458428 Ibleo 1 2.771342189 2.865297244 3.093340465 3.5 2.72 12 1.01 57468.66 468915.94 184558.08
177482395 GB / Ling 2nd Jan 6f Hcap 44198.59722 28659808 Rohaan 0 2.44 2.44365781 2.795702203 3 2.36 1000 2.48 6884.58 214335.08 45763.14
177482305 GB / Sand 2nd Jan 2m Grd1 Nov Hrd 44198.60069 11144887 Metier 1 2.98 2.623330988 2.336856915 3.05 2.16 3.3 1.01 68284.7 569650.62 223772.66
177482403 GB / Ling 2nd Jan 6f Nov Stks 44198.62153 35856072 Hidden Breeze 1 1.899786009 1.700147533 1.695047545 1.93 1.56 3.15 1.01 5141.26 397544.9 115253.84

Solution

  • This can be done with a straight select, but it is not particularly easy. Access does not have a Row_Number function, so we need to generate ids in order to be able to do a self join on the adjacent rows. Furthermore, you want both the adjacent rows so we need to union the two results. That gives the following:

    SELECT PrevRow.* FROM
    (SELECT  (SELECT COUNT (*) FROM TestDemo WHERE Event_Dt < td.Event_Dt) AS ROW_ID, td.Event_ID, td.Menu_Hint, td.Event_Name, td.Event_Dt, td.Selection_ID, td.Selection_Name, td.Win_Lose, td.Result, td.PPWAP, td.MORNINGWAP, td.PPMAX, td.PPMIN, td.IPMAX, td.IPMIN, td.MORNINGTRADEDVOL, td.PPTRADEDVOL, td.IPTRADEDVOL
    FROM TestDemo td  ORDER BY td.Event_Dt) PrevRow
    INNER JOIN 
    (SELECT  (SELECT COUNT (*) FROM TestDemo WHERE Event_Dt < td.Event_Dt) AS ROW_ID, td.Event_ID, td.Menu_Hint, td.Event_Name, td.Event_Dt, td.Selection_ID, td.Selection_Name, td.Win_Lose, td.Result, td.PPWAP, td.MORNINGWAP, td.PPMAX, td.PPMIN, td.IPMAX, td.IPMIN, td.MORNINGTRADEDVOL, td.PPTRADEDVOL, td.IPTRADEDVOL
    FROM TestDemo td  ORDER BY td.Event_Dt) NextRow
    ON PrevRow.ROW_ID = NextRow.ROW_ID - 1
    WHERE PrevRow.Result < 3 AND NextRow.Result < 3
    UNION SELECT NextRow.* FROM
    (SELECT  (SELECT COUNT (*) FROM TestDemo WHERE Event_Dt < td.Event_Dt) AS ROW_ID, td.Event_ID, td.Menu_Hint, td.Event_Name, td.Event_Dt, td.Selection_ID, td.Selection_Name, td.Win_Lose, td.Result, td.PPWAP, td.MORNINGWAP, td.PPMAX, td.PPMIN, td.IPMAX, td.IPMIN, td.MORNINGTRADEDVOL, td.PPTRADEDVOL, td.IPTRADEDVOL
    FROM TestDemo td  ORDER BY td.Event_Dt) PrevRow
    INNER JOIN 
    (SELECT  (SELECT COUNT (*) FROM TestDemo WHERE Event_Dt < td.Event_Dt) AS ROW_ID, td.Event_ID, td.Menu_Hint, td.Event_Name, td.Event_Dt, td.Selection_ID, td.Selection_Name, td.Win_Lose, td.Result, td.PPWAP, td.MORNINGWAP, td.PPMAX, td.PPMIN, td.IPMAX, td.IPMIN, td.MORNINGTRADEDVOL, td.PPTRADEDVOL, td.IPTRADEDVOL
    FROM TestDemo td  ORDER BY td.Event_Dt) NextRow
    ON PrevRow.ROW_ID = NextRow.ROW_ID - 1
    WHERE PrevRow.Result < 3 AND NextRow.Result < 3;
    

    In order to generate the ids we need to Order By on a given column or columns, in this case Event_dt. Notice how the ROW_ID is a sub-select based on the count of items that have a lesser event_dt than the current Event_dt.