Requête SQL pour joindre deux tables en fonction de l'horodatage le plus proche

J'ai deux tables en SQL et j'ai besoin d'être en mesure de faire une jointure basée sur l'horodatage dans la table B, qui est antérieure ou égale à l'horodatage dans le tableau A.

Donc, voici quelques fausses données pour les deux tables et la sortie désirée:

Fermé Des Cas (Tableau A)

| id | résolution | timestamp | 
------------------------------------------------ 
| 1 | résolu | 2006-10-05 11:55:44.888153 | 
| 2 | fermé | 2007-10-07 12:34:17.033498 | 
| 3 | saccagé | 2008-10-09 08:19:36.983747 | 
| 4 | résolu | 2010-10-13 04:28:14.348753 | 

Classification (Tableau B)

 
| id | valeur | timestamp | 
------------------------------------------------- 
| 1 | recrue | 2006-01-01 12:02:44.888153 | 
| 2 | deuxième | 2007-01-01 12:01:19.984333 | 
| 3 | junior | 2008-01-01 12:02:28.746149 | 

Résultats Souhaités

| id | résolution | timestamp | valeur | 
-------------------------------------------------------------- 
| 1 | résolu | 2006-10-05 11:55:44.888153 | recrue | 
| 2 | fermé | 2007-10-07 12:34:17.033498 | deuxième | 
| 3 | saccagé | 2008-10-09 08:19:36.983747 | junior | 
| 4 | résolu | 2010-10-13 04:28:14.348753 | junior | 

Donc, je sais que le code doit ressembler à la suivante, je ne peux pas comprendre de quoi faire avec le ON partie de la JOIN (1$et 2 $sont des variables qui seront passés):

SELECT case.id, case.resolution, case.timestamp, class.value
  FROM closed_cases AS case
  LEFT JOIN classifications AS class ON ???
  WHERE case.timestamp BETWEEN $1 AND $2;

Je sais que je pourrais utiliser une sous-sélection, mais ce sera d'exploitation sur au moins quelques milliers de lignes, probablement plus, et j'en ai besoin pour être très rapide, donc je m'attendais à une simple clause qui pourrait le faire.

source d'informationauteur Topher Fangio