Filtrer dans une requete Select

Résolu
J'ai la requête suivante :

SELECT
gs.tracker Date,
gs.lat V1,gs.lng V2,
gs.param->"$.io1" Var3
FROM objects g,objects_data_352848020302291 gs WHERE g.name='4000'
AND gs.tracker BETWEEN '2020-07-23 10:15:14' AND '2020-07-23 10:59:04' ;

Le résultat est :


J'ai besoin d'extraire a travers cette requête seulement les valeurs qui sont coloré en jeune :

Merci d'avance pour vous aides.

6 réponses

Résumé de la discussion

La requête SQL vise à extraire, dans une plage temporelle donnée, les valeurs où Var3 passe à 1 puis retombe à 0, avec des critères sur io1 et la vitesse. Des propositions visent à définir le démarrage et l’arrêt du véhicule en utilisant io1=1 et vitesse>6 pour démarrer, puis io1=0 et vitesse=0 pour arrêter, afin d’obtenir les lignes vertes. D'autres échanges évoquent des approches techniques et des requêtes alternatives pour isoler le premier passage à 1 et le retour à 0 à partir des lignes précédentes. Une nuance utile est que certains indiquent que l'identifiant n'est pas fiable comme référence et que le départ doit être identifié par IO1=1, sans dépendre de l'ID.

Bobot (l’IA à votre service)
  1. Modérateur
    Bonjour
    Dans la requête tu rajoutes une condition sur V1 , V2 .. ou ...
    Ben ... On ne sait pas.

    Comment choisis tu les lignes que tu veux récupérer ? Sur quel critère te bases tu ?

    Et.. les "extraire".. c'est à dire ?

    0
    1. Modérateur
      J'ai l'impression que tu cherches à récupérer les valeurs lorsqu'elles changent d'une ligne à l'autre sur la colonne V3
      0
    2. @jordane45Bonjour ,
      Merci pour votre retour.
      Le critère :
      La 1ier ligne : c'est le 1ier valeur dont Var3=1
      La 2ime ligne : c'est le 1ier valeur dont Var3 devient égale à zéro
      La 3ime ligne : c'est le 1ier valeur dont Var3 devient égale à 1
      La 3ime ligne : c'est le 1ier valeur dont Var3 devient égale à zéro ......
      0
    3. Modérateur
      @LemjidDonc c'est bien ce que je t'ai indiqué ... au changement de valeur de V3...
      0
    4. @jordane45Oui exactement mais je sais pas comment le faire ?
      est-il possible de m'aider stp
      0
  2. Contributeur
    bonjour,
    peux-tu nous montrer ce que contiennent tes deux tables?
    0
    1. Bonjour,
      on a pas besoin de contenu des deux tables ,
      Je veux appliquer les critères suivantes sur la requête en haut
      Les critères :
      La 1ier ligne : c'est le 1ier valeur dont Var3=1
      La 2ime ligne : c'est le 1ier valeur dont Var3 devient égale à zéro
      La 3ime ligne : c'est le 1ier valeur dont Var3 devient égale à 1
      La 3ime ligne : c'est le 1ier valeur dont Var3 devient égale à zéro ......
      0
      1. @jordane45C'est le meme lien de forum ??
        0
    2. Rebonjour ;
      J'ai réfléchi finalement a stocker les valeurs de la 1ier requête dans un nouvelle table Data_copy dans la base de données comme suit :

      Le problème que j'arrive pas a récupérer les valeurs exactement demandées :
      Toujours je souhaite récupérer les valeurs en jeunes :
      0
      1. Contributeur
        moi j'essaierais ainsi:
        select idc, dates, io1c as io1, lat, lng 
        from 
        (select d1.id as idc, d1.io1 as io1c, d1.dates, d1.lat, d1.lng, max(d2.id) as idp
        from Data_copy as d1, Data_copy as d2
        where d1.id > d2.id) as cp,
        Data_copy as dp
        where dp.id = cp.idp
        and dp.io1 <> cp.io1
        0
    3. Merci pour votre retour ,
      J'ai ce message d'erreur :
      0
      1. Contributeur
        select cp.idc as id, cp.dates, cp.io1c as io1, cp.lat, cp.lng 
        from 
        (select d1.id as idc, d1.io1 as io1c, d1.dates, d1.lat, d1.lng, max(d2.id) as idp
        from Data_copy as d1, Data_copy as d2
        where d1.id > d2.id
        group by d1.id, d1.io1, d1.dates, d1.lat, d1.lng) as cp,
        Data_copy as dp
        where dp.id = cp.idp
        and dp.io1 <> cp.io1c


        EDIT: erreur dernière ligne.

        RE-EDIT: mieux avec un GROUP BY
        0
      2. @yg_beCette requête est correcte seulement pour cette exemple c-à-d qu'il filtre correctement les valeurs dont l'ID =(6,86,126 et136) dans l'exemple de #16.
        Par contre lorsqu'on change les valeurs de la requête select qui donne :


        La requête commence par la ligne dont l'id =6 or que c'est complétement incorrecte car c'est une STOP puisque IO=0 et IO : c'est un contacton lorsque IO=1 et contactoff lorsque IO=0 et toujours il faut commencer par Start puis Stop ,Start puis Stop , Start puis Stop ...

        Merci pour votre aide de nouveau :( pour que la requête fonctionne dans tous les cas .
        0
      3. Contributeur
        @Lemjidla requête fait exactement ce que tu as demandé: sélectionner les enregistrements dont la valeur IO1 change.
        tu gagnerais beaucoup de temps et d'énergie si tu expliquais précisément, dés le départ, le résultat que tu cherches.
        0
      4. @yg_beOui ,j'ai oublié de mentionner qu'il faut toujours commencer par les IO1 =1 puis IO1 =0 et puis IO1 =1 et puis IO1 =0 ...
        0
      5. @yg_be@yg_be : Est-il possible de possible de modifier stp la requête de #19 pour que j'aura la bonne résultat ?
        0
    4. La nouvelle requête retourne vide :(
      0
      1. Contributeur
        même avec le GROUP BY?
        si oui, que retourne ceci:
        select d1.id as idc, d1.io1 as io1c, d1.dates, d1.lat, d1.lng, max(d2.id) as idp
        from Data_copy as d1, Data_copy as d2
        where d1.id > d2.id
        group by d1.id, d1.io1, d1.dates, d1.lat, d1.lng
        0
      2. @yg_beLa requête retourne toute les lignes presque : Bon c'est vrai c'est difficile de comprendre sans le schéma de la base réel :
        Voici ma table :

        CREATE TABLE IF NOT EXISTS `data_copy` (
        `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
        `dates` datetime DEFAULT NULL,
        `io1` int(11) DEFAULT NULL,
        `lat` double DEFAULT NULL,
        `lng` double DEFAULT NULL,
        PRIMARY KEY (`id`)
        ) ENGINE=MyISAM AUTO_INCREMENT=141 DEFAULT CHARSET=utf8mb4;

        INSERT INTO `data_copy` (`id`, `dates`, `io1`, `lat`, `lng`) VALUES
        (1, '2020-07-23 10:15:14', 0, 36.817542, 10.186166),
        (2, '2020-07-23 10:15:14', 0, 36.817542, 10.186166),
        (3, '2020-07-23 10:15:14', 0, 36.817542, 10.186166),
        (4, '2020-07-23 10:15:14', 0, 36.817542, 10.186166),
        (5, '2020-07-23 10:15:14', 0, 36.817542, 10.186166),
        (6, '2020-07-23 10:16:50', 1, 36.817536, 10.18616),
        (7, '2020-07-23 10:16:50', 1, 36.817536, 10.18616),
        (8, '2020-07-23 10:16:50', 1, 36.817536, 10.18616),
        (9, '2020-07-23 10:16:50', 1, 36.817536, 10.18616),
        (10, '2020-07-23 10:16:50', 1, 36.817536, 10.18616),
        (11, '2020-07-23 10:18:50', 1, 36.81591, 10.185574),
        (12, '2020-07-23 10:18:50', 1, 36.81591, 10.185574),
        (13, '2020-07-23 10:18:50', 1, 36.81591, 10.185574),
        (14, '2020-07-23 10:18:50', 1, 36.81591, 10.185574),
        (15, '2020-07-23 10:18:50', 1, 36.81591, 10.185574),
        (16, '2020-07-23 10:20:50', 1, 36.815805, 10.18501),
        (17, '2020-07-23 10:20:50', 1, 36.815805, 10.18501),
        (18, '2020-07-23 10:20:50', 1, 36.815805, 10.18501),
        (19, '2020-07-23 10:20:50', 1, 36.815805, 10.18501),
        (20, '2020-07-23 10:20:50', 1, 36.815805, 10.18501),
        (21, '2020-07-23 10:22:51', 1, 36.815734, 10.184591),
        (22, '2020-07-23 10:22:51', 1, 36.815734, 10.184591),
        (23, '2020-07-23 10:22:51', 1, 36.815734, 10.184591),
        (24, '2020-07-23 10:22:51', 1, 36.815734, 10.184591),
        (25, '2020-07-23 10:22:51', 1, 36.815734, 10.184591),
        (26, '2020-07-23 10:24:51', 1, 36.817392, 10.18353),
        (27, '2020-07-23 10:24:51', 1, 36.817392, 10.18353),
        (28, '2020-07-23 10:24:51', 1, 36.817392, 10.18353),
        (29, '2020-07-23 10:24:51', 1, 36.817392, 10.18353),
        (30, '2020-07-23 10:24:51', 1, 36.817392, 10.18353),
        (31, '2020-07-23 10:26:51', 1, 36.81617, 10.180122),
        (32, '2020-07-23 10:26:51', 1, 36.81617, 10.180122),
        (33, '2020-07-23 10:26:51', 1, 36.81617, 10.180122),
        (34, '2020-07-23 10:26:51', 1, 36.81617, 10.180122),
        (35, '2020-07-23 10:26:51', 1, 36.81617, 10.180122),
        (36, '2020-07-23 10:28:51', 1, 36.814467, 10.17846),
        (37, '2020-07-23 10:28:51', 1, 36.814467, 10.17846),
        (38, '2020-07-23 10:28:51', 1, 36.814467, 10.17846),
        (39, '2020-07-23 10:28:51', 1, 36.814467, 10.17846),
        (40, '2020-07-23 10:28:51', 1, 36.814467, 10.17846),
        (41, '2020-07-23 10:30:51', 1, 36.813606, 10.177695),
        (42, '2020-07-23 10:30:51', 1, 36.813606, 10.177695),
        (43, '2020-07-23 10:30:51', 1, 36.813606, 10.177695),
        (44, '2020-07-23 10:30:51', 1, 36.813606, 10.177695),
        (45, '2020-07-23 10:30:51', 1, 36.813606, 10.177695),
        (46, '2020-07-23 10:32:51', 1, 36.814048, 10.17543),
        (47, '2020-07-23 10:32:51', 1, 36.814048, 10.17543),
        (48, '2020-07-23 10:32:51', 1, 36.814048, 10.17543),
        (49, '2020-07-23 10:32:51', 1, 36.814048, 10.17543),
        (50, '2020-07-23 10:32:51', 1, 36.814048, 10.17543),
        (51, '2020-07-23 10:34:48', 1, 36.813654, 10.169695),
        (52, '2020-07-23 10:34:48', 1, 36.813654, 10.169695),
        (53, '2020-07-23 10:34:48', 1, 36.813654, 10.169695),
        (54, '2020-07-23 10:34:48', 1, 36.813654, 10.169695),
        (55, '2020-07-23 10:34:48', 1, 36.813654, 10.169695),
        (56, '2020-07-23 10:35:20', 1, 36.810982, 10.16504),
        (57, '2020-07-23 10:35:20', 1, 36.810982, 10.16504),
        (58, '2020-07-23 10:35:20', 1, 36.810982, 10.16504),
        (59, '2020-07-23 10:35:20', 1, 36.810982, 10.16504),
        (60, '2020-07-23 10:35:20', 1, 36.810982, 10.16504),
        (61, '2020-07-23 10:36:05', 1, 36.809075, 10.159855),
        (62, '2020-07-23 10:36:05', 1, 36.809075, 10.159855),
        (63, '2020-07-23 10:36:05', 1, 36.809075, 10.159855),
        (64, '2020-07-23 10:36:05', 1, 36.809075, 10.159855),
        (65, '2020-07-23 10:36:05', 1, 36.809075, 10.159855),
        (66, '2020-07-23 10:36:55', 1, 36.805008, 10.16237),
        (67, '2020-07-23 10:36:55', 1, 36.805008, 10.16237),
        (68, '2020-07-23 10:36:55', 1, 36.805008, 10.16237),
        (69, '2020-07-23 10:36:55', 1, 36.805008, 10.16237),
        (70, '2020-07-23 10:36:55', 1, 36.805008, 10.16237),
        (71, '2020-07-23 10:38:05', 1, 36.80089, 10.164686),
        (72, '2020-07-23 10:38:05', 1, 36.80089, 10.164686),
        (73, '2020-07-23 10:38:05', 1, 36.80089, 10.164686),
        (74, '2020-07-23 10:38:05', 1, 36.80089, 10.164686),
        (75, '2020-07-23 10:38:05', 1, 36.80089, 10.164686),
        (76, '2020-07-23 10:40:05', 1, 36.798845, 10.164954),
        (77, '2020-07-23 10:40:05', 1, 36.798845, 10.164954),
        (78, '2020-07-23 10:40:05', 1, 36.798845, 10.164954),
        (79, '2020-07-23 10:40:05', 1, 36.798845, 10.164954),
        (80, '2020-07-23 10:40:05', 1, 36.798845, 10.164954),
        (81, '2020-07-23 10:42:05', 1, 36.801434, 10.164492),
        (82, '2020-07-23 10:42:05', 1, 36.801434, 10.164492),
        (83, '2020-07-23 10:42:05', 1, 36.801434, 10.164492),
        (84, '2020-07-23 10:42:05', 1, 36.801434, 10.164492),
        (85, '2020-07-23 10:42:05', 1, 36.801434, 10.164492),
        (86, '2020-07-23 10:42:26', 0, 36.801421, 10.164523),
        (87, '2020-07-23 10:42:26', 0, 36.801421, 10.164523),
        (88, '2020-07-23 10:42:26', 0, 36.801421, 10.164523),
        (89, '2020-07-23 10:42:26', 0, 36.801421, 10.164523),
        (90, '2020-07-23 10:42:26', 0, 36.801421, 10.164523),
        (91, '2020-07-23 10:44:27', 0, 36.801395, 10.164525),
        (92, '2020-07-23 10:44:27', 0, 36.801395, 10.164525),
        (93, '2020-07-23 10:44:27', 0, 36.801395, 10.164525),
        (94, '2020-07-23 10:44:27', 0, 36.801395, 10.164525),
        (95, '2020-07-23 10:44:27', 0, 36.801395, 10.164525),
        (96, '2020-07-23 10:46:27', 0, 36.801418, 10.164592),
        (97, '2020-07-23 10:46:27', 0, 36.801418, 10.164592),
        (98, '2020-07-23 10:46:27', 0, 36.801418, 10.164592),
        (99, '2020-07-23 10:46:27', 0, 36.801418, 10.164592),
        (100, '2020-07-23 10:46:27', 0, 36.801418, 10.164592),
        (101, '2020-07-23 10:48:27', 0, 36.801434, 10.164607),
        (102, '2020-07-23 10:48:27', 0, 36.801434, 10.164607),
        (103, '2020-07-23 10:48:27', 0, 36.801434, 10.164607),
        (104, '2020-07-23 10:48:27', 0, 36.801434, 10.164607),
        (105, '2020-07-23 10:48:27', 0, 36.801434, 10.164607),
        (106, '2020-07-23 10:50:27', 0, 36.80143, 10.164605),
        (107, '2020-07-23 10:50:27', 0, 36.80143, 10.164605),
        (108, '2020-07-23 10:50:27', 0, 36.80143, 10.164605),
        (109, '2020-07-23 10:50:27', 0, 36.80143, 10.164605),
        (110, '2020-07-23 10:50:27', 0, 36.80143, 10.164605),
        (111, '2020-07-23 10:52:28', 0, 36.801414, 10.164598),
        (112, '2020-07-23 10:52:28', 0, 36.801414, 10.164598),
        (113, '2020-07-23 10:52:28', 0, 36.801414, 10.164598),
        (114, '2020-07-23 10:52:28', 0, 36.801414, 10.164598),
        (115, '2020-07-23 10:52:28', 0, 36.801414, 10.164598),
        (116, '2020-07-23 10:54:28', 0, 36.801408, 10.164628),
        (117, '2020-07-23 10:54:28', 0, 36.801408, 10.164628),
        (118, '2020-07-23 10:54:28', 0, 36.801408, 10.164628),
        (119, '2020-07-23 10:54:28', 0, 36.801408, 10.164628),
        (120, '2020-07-23 10:54:28', 0, 36.801408, 10.164628),
        (121, '2020-07-23 10:56:28', 0, 36.801411, 10.164647),
        (122, '2020-07-23 10:56:28', 0, 36.801411, 10.164647),
        (123, '2020-07-23 10:56:28', 0, 36.801411, 10.164647),
        (124, '2020-07-23 10:56:28', 0, 36.801411, 10.164647),
        (125, '2020-07-23 10:56:28', 0, 36.801411, 10.164647),
        (126, '2020-07-23 10:56:55', 1, 36.801411, 10.164648),
        (127, '2020-07-23 10:56:55', 1, 36.801411, 10.164648),
        (128, '2020-07-23 10:56:55', 1, 36.801411, 10.164648),
        (129, '2020-07-23 10:56:55', 1, 36.801411, 10.164648),
        (130, '2020-07-23 10:56:55', 1, 36.801411, 10.164648),
        (131, '2020-07-23 10:58:55', 1, 36.804986, 10.162534),
        (132, '2020-07-23 10:58:55', 1, 36.804986, 10.162534),
        (133, '2020-07-23 10:58:55', 1, 36.804986, 10.162534),
        (134, '2020-07-23 10:58:55', 1, 36.804986, 10.162534),
        (135, '2020-07-23 10:58:55', 1, 36.804986, 10.162534),
        (136, '2020-07-23 10:59:04', 0, 36.805504, 10.16215),
        (137, '2020-07-23 10:59:04', 0, 36.805504, 10.16215),
        (138, '2020-07-23 10:59:04', 0, 36.805504, 10.16215),
        (139, '2020-07-23 10:59:04', 0, 36.805504, 10.16215),
        (140, '2020-07-23 10:59:04', 0, 36.805504, 10.16215);
        COMMIT;

        Les lignes a récupérer sont : 6,86,126 et 136 seulement pas d'autre
        0
      3. Contributeur
        @Lemjidtu confirmes que la requête en #19 ne retourne rien?
        montre ce que retourne la requête en #21.
        0
      4. @yg_be#19 : c'est correcte , je suis très désolé et merci bien pour votre aide .
        J'ai une autre question : Avez vous une idée comment je peut mettre les lignes 6 et 86 dans une seule ligne (1ier ligne) et
        la deuxième ligne contient 126 et 136 .Comme ca : Pour info j'utilise PHP

        0
      5. Contributeur
        @Lemjiden modifiant légèrement la boucle PHP.
        0