Bonsoir à tous,
Le problème me parait simple, mais je n'ai pas trouvé de solution simple donc je viens demander votre avis
Considérons une table :
Ou id est un serial, date un timestamp et value un varchar
Code : Sélectionner tout - Visualiser dans une fenêtre à part id | date | value
Elle est peuplée de beaucoup de données, qui ont un espacement moyen de quelques minutes. Par contre cet espacement n'est pas régulier, comme ceci
Nous disposons de plusieurs dates et nous souhaitons en une seule requête récupérer les rangs inférieurs les plus près de ces dates (un rang par date)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 id | date | value 1 | 2014-01-01 00:01:21 | toto 2 | 2014-01-01 00:02:34 | titi 3 | 2014-01-01 00:07:25 | tata 4 | 2014-01-01 00:07:57 | tutu 5 | 2014-01-01 00:10:42 | tete 6 | 2014-01-01 00:12:21 | toto ....
Par exemple, si les dates données sont
- 2014-01-01 00:02:00
- 2014-01-01 00:08:00
- 2014-01-01 00:12:00
Nous aimerions avoir ce résultat, en une seule requête
Une solution simple serait UNION mais elle ne nous convient pas pour des raisons de performance (ça fera l'affaire si on ne trouve pas mieux, mais intuitivement on se dit qu'on devrait pouvoir faire mieux, c'est juste qu'on y arrive pas)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 id | date | value 1 | 2014-01-01 00:01:21 | toto 4 | 2014-01-01 00:07:57 | tutu 6 | 2014-01-01 00:12:21 | toto
Avez vous d'autres idées ? Des pistes ?
Merci !
Partager