Ya, write a php function to deal with the data.
I noticed when I saw the site_id that the sequential thing was most likely too 'hacky' to pull off.
With a simple data set it would do the trick though.
It is on my brain now, usually when something sticks with me like this the answer will come to me while sitting on the toilet or just before/after I sleep.
Basically what you need is a function that gets closest future date and a function that gets closest past date, then you pass it the curr row and let it find those other rows for you then return all three from the function.