J'ai données dans le tableau postgreSQL comme suit,rang PostgresSQL requête
pkid id timestamp isactive
-----------------------------------------
1 1 "2013-08-08 10:10:10" 0
2 1 "2013-08-08 10:11:10" 0
3 1 "2013-08-08 10:12:10" 0
4 1 "2013-08-08 10:13:10" 1
5 1 "2013-08-08 10:14:10" 1
6 1 "2013-08-08 10:15:10" 1
7 1 "2013-08-08 10:16:10" 1
8 1 "2013-08-08 10:17:10" 1
9 1 "2013-08-08 10:18:10" 0
10 1 "2013-08-08 10:19:00" 0
11 2 "2013-08-08 09:10:10" 0
Je veux obtenir une requête pour obtenir premier enregistrement lorsqu'il change d'actif à l'état inactif ou vice-versa, par exemple pour chaque ID,
1 1 "2013-08-08 10:10:10" 0
4 1 "2013-08-08 10:13:10" 1
9 1 "2013-08-08 10:18:10" 0
11 2 "2013-08-08 09:10:10" 0
J'ai essayé d'utiliser le rang() mais attribuer une valeur de rang à travers le actif/inactif, ce rang() (partition par identifiant, par ordre isActive horodatage)
pkid id timestamp isactive rank
----------------------------------------------
1 1 "2013-08-08 10:10:10" 0 1
2 1 "2013-08-08 10:11:10" 0 2
3 1 "2013-08-08 10:12:10" 0 3
4 1 "2013-08-08 10:13:10" 1 1
5 1 "2013-08-08 10:14:10" 1 2
6 1 "2013-08-08 10:15:10" 1 3
7 1 "2013-08-08 10:16:10" 1 4
8 1 "2013-08-08 10:17:10" 1 5
9 1 "2013-08-08 10:18:10" 0 4
10 1 "2013-08-08 10:19:00" 0 5
11 2 "2013-08-08 09:10:10" 0 1
je voudrais voir le résultat que,
pkid id timestamp isactive rank
---------------------------------------------
1 1 "2013-08-08 10:10:10" 0 1
2 1 "2013-08-08 10:11:10" 0 2
3 1 "2013-08-08 10:12:10" 0 3
4 1 "2013-08-08 10:13:10" 1 1
5 1 "2013-08-08 10:14:10" 1 2
6 1 "2013-08-08 10:15:10" 1 3
7 1 "2013-08-08 10:16:10" 1 4
8 1 "2013-08-08 10:17:10" 1 5
9 1 "2013-08-08 10:18:10" 0 1
10 1 "2013-08-08 10:19:00" 0 2
11 2 "2013-08-08 09:10:10" 0 1
je peux alors choisir tous les rangs == 1 et obtenir l'horodatage lorsque l'état a changé.
De telles requêtes «quand l'état a changé» sont souvent mieux faites en comparant 'state = lag (state)'. –