Comparer deux lignes

Franck -  
jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
Je souhaite comprer deux lignes d'une base de données en utilisant une requête SQL.
Ma base :
ID----- Date--------Num_machine------Compteur
1-------01/01/18-----1------------------------45
2-------01/01/18-----2------------------------12
3-------02/01/18-----1------------------------52
4-------02/01/18-----2------------------------26
5-------03/01/18-----1------------------------56

Le compteur est incrémenté sur les machines.

Je voudrai obtenir :
ID----Date----------Num_machine-----Compteur-----ID1----Date1---------Num_machine1----Compteur1----Diff
1------01/01/18------1-------------------------45---------------3-------02/01/18----------1-----------------------52-----------------7
2------01/01/18------2-------------------------12---------------4-------02/01/18----------2-----------------------26------------------14
3------02/01/18------1-------------------------52---------------5--------03/01/18---------1-----------------------56------------------4

Je vous remercie par avance pour votre aide.

1 réponse

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Tu parles de requête SQL .. mais tu postes dans le forum WINDEV.....
    Ta question concerne t'elle du code windev... ou une requête (le langage...) SQL ?

    Si SQL ... avec quel SGBD ? Mysql ? Oracle ? SqlServer ? PostgreSql ? Sqlite ? access ? Autre ?

    Et enfin, si je comprend bien (j'ai mis quelques minutes à comprendre ta question (surtout avec l'ID 3 qui se répétait deux fois à gauche et à droite...), tu veux calculer la différence entre la valeur du COMPTEUR à la date N avec celle en N-1 ?

    Niveau requête ça pourrait ressembler à un truc du genre
    SELECT tb0.num num
         , tb0.ID
         , tb0.`Date`  as DATE
         , tb0.Num_machine
         , tb0.Compteur as CPT
         , tb_pre.ID  as ID1
         , tb_pre.`Date`  as DATE1
         , tb_pre.Num_machine1
         , tb_pre.Compteur as CPT_PREC
         , tb0.Compteur - tb_pre.Compteur as DIF    
    FROM (
      SELECT @rownum := @rownum + 1 AS  num, Date FROM (SELECT Date FROM TaTable order by Num_machine,`Date`)
    ) tb0 -- l'ensemble des enregistrements, tries et numerotes
    LEFT JOIN (
      SELECT @rownum := @rownum + 1 AS num, Date FROM (SELECT Date FROM TaTable order by Num_machine,`Date`)
    ) tb_pre  ON (tb_pre.num =(tb0.num-1) AND tb_pre.Num_machine = tb0.Num_machine) -- ON joint chaque resultat avec celui ayant le numero inferieur
    order by tb0.num;
    

    0