Vous n'êtes pas identifié(e).
Bonjour,
Je suis débutant en BDD mysql mais souhaiterais avoir un peu d'aide pour une requête simple.
J'ai la base de donnée suivante:
http://imageshack.us/a/img24/8821/basedd.png
Ce que je souhaite avoir c'est une colonne (par ex nommé diff) avec la différence entre les valeurs de la colonne "value" pour la dernière date/time et celle juste avant.
Exemple :
2013-1-27 16:01:01 50393 152
2013-1-27 17:01:01 50542 149
J'ai le script actuel pour remplir la base en temps réel:
Question :
Je souhaiterais ajouter la colonne "diff" et la remplir en temps grâce au script modifié .
Merci de votre aide pour modifier ce script/requête
Hors ligne
Saluton,
Je reviens sur ton post, dont j'ai colorisé le code ce matin, mais que je n'avais pas le temps de traiter à ce moment-là.
Je crois que tu te prends la tête pour rien.
Si tu veux obtenir la différence (en fait l'écart) entre les valeurs des colonnes `time`consécutives dans la table, tu pourras toujours l'obtenir en faisant une requête qui mettra la table en jointure avec une sous-requête ramenant juste la ligne précédente (si elle existe : cas de la première ligne).
En outre, tu risques de galérer pour rendre la chose automatique.
Ce qui me semble plus désolant ce sont les noms que tu as choisis pour tes colonnes `date` et `time`qui sont des mots réservés du langage SQL.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour et merci pour ta réponse.
Cependant je suis novice et ne suis pas a l'origine du script que j'ai juste adapté pour mes besoins.
Quelles seraient les lignes à ajouter pour avoir les differences entre deux lignes consecutives sachant que je souhaites pouvoir avoir cette difference stockés dans la base .
Les valeurs de la colonne "time" sont renseignées par un cron qui envoie toute les heures la valeur.
Merci d'avance pour les lignes de scripts......
Cordialement
Hors ligne
Sauf dans des cas très particuliers et, partant, très rares, dans la conception des bases de données relationnelles, les résultats de calcul ne sont pas définis dans les tables puisque, par définition, leurs dépendances fonctionnelles avec les autres colonnes de la tables ne respecteraient pas les formes normales.
D'autre part, pourquoi stocker l'heure et la date dans deux colonnes alors qu'un format DATETIME ou TIMESTAMP permet d'avoir l'information sur une seule colonne ?
Ces lignes sont-elles créées de façon chronologique ?
Peut-on peut envisager MAX sur la date et l'heure ? ( nouvel intérêt d'avoir une colonne en DATETIME ou TIMESTAMP )
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Je me suis amusé à me faire cette petite table de test :
-- --------------------------------------------------------
--
-- Structure de la table `events`
--
CREATE TABLE IF NOT EXISTS `events` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`temps` datetime NOT NULL,
`empan` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `temps` (`temps`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;
--
-- Contenu de la table `events`
--
INSERT INTO `events` (`id`, `temps`, `empan`) VALUES
(1, '2013-02-05 19:18:02', 0),
(2, '2013-02-05 20:18:02', 0),
(3, '2013-02-05 21:18:02', 0),
(4, '2013-02-05 22:18:02', 0),
(5, '2013-02-05 23:18:02', 0),
(6, '2013-02-06 00:18:02', 0),
(7, '2013-02-06 01:18:02', 0),
(8, '2013-02-06 02:18:02', 0),
(9, '2013-02-06 03:18:02', 0),
(10, '2013-02-06 04:18:02', 0),
(11, '2013-02-06 05:18:02', 0),
(12, '2013-02-06 06:18:02', 0),
(13, '2013-02-06 07:18:02', 0),
(14, '2013-02-06 08:18:02', 0),
(15, '2013-02-06 09:18:02', 0),
(16, '2013-02-06 10:18:02', 0),
(17, '2013-02-06 11:18:02', 0),
(18, '2013-02-06 12:18:02', 0),
(19, '2013-02-06 13:18:02', 0),
(20, '2013-02-06 14:18:02', 0);
sur laquelle j'ai appliqué cette requête
Et qui donne le résultat suivant
C'est ce que tu cherches à obtenir, non ?
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Merci bcp pour ta réponse. c'est super sympa !!!!!!!!
Je ne comprends pas pourquoi tu as mis des zeros dans toute les colonnes 'empan' ? Le resultat 10000.000000:
id Décroissant temps proche ecart
20 2013-02-06 14:18:02 2013-02-06 13:18:02 10000.000000
est bizarre ....ce devrait être ZERO ?
Je pense que c'est proche de ce que je veux faire mais au lieu des ZEROS, j'ai diverses valeurs ( qui sont renseignée par un CRON qui remplis la base heure après heure ....cela vient de capteurs) : exemple :
(1, '2013-02-05 19:18:02', 125), (2, '2013-02-05 20:18:02', 158),(3, '2013-02-05 21:18:02', 166),(4, '2013-02-05 22:18:02',181)......etc.....
donc je devrais avoir les diff:
125 - 0
158 - 125
166-158
181-166
etc......
Et j'aurai souhaité injecter le résultat dans une colonne de la même table ......ou même dans une autre table qui reprends la dernière date et l'écart .
Merci de ton aide
Dernière modification par johndoe2011 (05-02-2013 20:45:46)
Hors ligne