Demaestro - 8:24 pm on Oct 5, 2010 (gmt 0)
The only way I can think of that wouldn't be a nightmare of code would be to put a sequential id into the READINGS table.
If you can get your data like this:
Siteid | Date | Measurement | uniq_sequence_id
1 | 2008-11-20 | 28.432 | 1
1 | 2008-12-04 | 37.681 | 2
1 | 2009-01-12 | 59.529 | 3
1 | 2009-02-04 | 67.831 | 4
Then all you have to do is select the row you want then add 1 to the sequence and grab the row with that sequence id, then subtract 1 from the sequence and grab that row.
FROM readings AS curr
left join readings as prev on (curr.uniq_sequence_id - 1) = prev.uniq_sequence_id
left join readings next on (curr.uniq_sequence_id + 1) = next.uniq_sequence_id
This logic will only work if the sequence doesn't skip any numbers.