Comparer deux lignes

Fermé
Franck - 3 oct. 2018 à 14:27
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 3 oct. 2018 à 14:51
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.
A voir également:

1 réponse

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
3 oct. 2018 à 14:51
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