par
ouckileou » 05 juin 2005, 14:30
Bon courage.
héhé merci
Bon pour revenir au sujet initial, j'ai réussi à faire ce que je voulais faire, à savoir un classement directement en SQL
je le poste des fois que ça intéresse quelqu'un, vous verrez si c'est bien ça que vous aviez compris
donc voici une petite table pour tester :
Code : Tout sélectionner
#
# Table structure for table 'operations'
#
CREATE TABLE operations (
id_operation int(3) unsigned NOT NULL auto_increment,
date_debut date default NULL,
date_fin date default NULL,
ecart tinyint(3) unsigned default NULL,
PRIMARY KEY (id_operation),
KEY id (id_operation)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
#
# Dumping data for table 'operations'
#
INSERT INTO operations VALUES("1", "2005-06-05", "2005-06-10", "5");
INSERT INTO operations VALUES("2", "2005-06-05", "2005-06-15", "10");
INSERT INTO operations VALUES("3", "2005-06-05", "2005-06-11", "6");
INSERT INTO operations VALUES("4", "2005-06-05", "2005-06-28", "22");
INSERT INTO operations VALUES("5", "2005-06-05", "2005-06-25", "20");
INSERT INTO operations VALUES("6", "2005-06-05", "2005-07-10", "35");
INSERT INTO operations VALUES("7", "2005-06-05", "2005-06-06", "1");
j'ai mis ici un champ écart pour vérifier, mais normalement on est pas censé l'avoir, sinon ça sert à rien
et ensuite la requête
d'abord simplement créer un champ qui contient le libellé de la catégorie
Code : Tout sélectionner
# les critères de tri
# ecart <= 7 -> 'DM'
# ecart <= 15 -> 'SP'
# ecart <= 30 -> 'SS'
# ecart > 30 -> 'MS'
SELECT id_operation, date_debut, date_fin, ecart,
CASE
WHEN DATEDIFF(date_fin,date_debut) <= 7 THEN "DM"
WHEN DATEDIFF(date_fin,date_debut) <= 15 THEN "SP"
WHEN DATEDIFF(date_fin,date_debut) <= 30 THEN "SP"
ELSE "MS" END
AS categorie
FROM operations;
et là, le regroupement par catégorie
Code : Tout sélectionner
SELECT COUNT(*) AS nbre_operations,
CASE
WHEN DATEDIFF(date_fin,date_debut) <= 7 THEN "DM"
WHEN DATEDIFF(date_fin,date_debut) <= 15 THEN "SP"
WHEN DATEDIFF(date_fin,date_debut) <= 30 THEN "SP"
ELSE "MS" END
AS categorie
FROM operations
GROUP BY categorie;
et voilà, comme ça on a nos valeurs déjà classées, le résultat de la commande :
3 | DM
1 | MS
3 | SP
ah ça me fait rêver

[quote="pjl"]Bon courage.[/quote]
héhé merci :lol:
Bon pour revenir au sujet initial, j'ai réussi à faire ce que je voulais faire, à savoir un classement directement en SQL
je le poste des fois que ça intéresse quelqu'un, vous verrez si c'est bien ça que vous aviez compris ;)
donc voici une petite table pour tester :
[code]
#
# Table structure for table 'operations'
#
CREATE TABLE operations (
id_operation int(3) unsigned NOT NULL auto_increment,
date_debut date default NULL,
date_fin date default NULL,
ecart tinyint(3) unsigned default NULL,
PRIMARY KEY (id_operation),
KEY id (id_operation)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
#
# Dumping data for table 'operations'
#
INSERT INTO operations VALUES("1", "2005-06-05", "2005-06-10", "5");
INSERT INTO operations VALUES("2", "2005-06-05", "2005-06-15", "10");
INSERT INTO operations VALUES("3", "2005-06-05", "2005-06-11", "6");
INSERT INTO operations VALUES("4", "2005-06-05", "2005-06-28", "22");
INSERT INTO operations VALUES("5", "2005-06-05", "2005-06-25", "20");
INSERT INTO operations VALUES("6", "2005-06-05", "2005-07-10", "35");
INSERT INTO operations VALUES("7", "2005-06-05", "2005-06-06", "1");[/code]
j'ai mis ici un champ écart pour vérifier, mais normalement on est pas censé l'avoir, sinon ça sert à rien :)
et ensuite la requête
d'abord simplement créer un champ qui contient le libellé de la catégorie
[code]
# les critères de tri
# ecart <= 7 -> 'DM'
# ecart <= 15 -> 'SP'
# ecart <= 30 -> 'SS'
# ecart > 30 -> 'MS'
SELECT id_operation, date_debut, date_fin, ecart,
CASE
WHEN DATEDIFF(date_fin,date_debut) <= 7 THEN "DM"
WHEN DATEDIFF(date_fin,date_debut) <= 15 THEN "SP"
WHEN DATEDIFF(date_fin,date_debut) <= 30 THEN "SP"
ELSE "MS" END
AS categorie
FROM operations;[/code]
et là, le regroupement par catégorie
[code]
SELECT COUNT(*) AS nbre_operations,
CASE
WHEN DATEDIFF(date_fin,date_debut) <= 7 THEN "DM"
WHEN DATEDIFF(date_fin,date_debut) <= 15 THEN "SP"
WHEN DATEDIFF(date_fin,date_debut) <= 30 THEN "SP"
ELSE "MS" END
AS categorie
FROM operations
GROUP BY categorie;[/code]
et voilà, comme ça on a nos valeurs déjà classées, le résultat de la commande :
[quote]
3 | DM
1 | MS
3 | SP
[/quote]
ah ça me fait rêver :cry: