Bonsoir,
il faut passer par une auto-jointure multiple en prenant comme point de repère la date. Attention en passant : "date" est un mot réservé en SQL, éviter de l'utiliser comme nom de colonne. Je l'ai utilisé pour coller au jeu d'essai proposé en mettant ce qu'il faut pour que ça fonctionne, mais ce n'est pâs forcément un exemple à suivre à la lettre. Mon conseil sur ce point : préfixer les noms de colonnes avec quelques caractères du nom de la table.
Je suis donc parti du jeu suivant :
mysql> CREATE TABLE ventes (
-> `num` INTEGER UNSIGNED NULL ,
-> `date` DATE NULL ,
-> `heure` TIME NULL ,
-> `prix` FLOAT(10,2) NULL
-> );
Query OK, 0 rows affected (0.06 sec)
mysql> INSERT INTO ventes (`num`, `date`, `heure`, `prix`) VALUES
-> ( 183, '1995-01-13', '10:47:36', 400 ),
-> ( 183, '1995-01-13', '11:45:12', 450 ),
-> ( 183, '1995-01-13', '16:45:53', 412 ),
-> ( 183, '1995-01-14', '12:47:36', 410 ),
-> ( 183, '1995-01-14', '13:45:12', 480 ),
-> ( 183, '1995-01-14', '17:45:53', 402 );
Query OK, 6 rows affected (0.01 sec)
Records: 6 Duplicates: 0 Warnings: 0
Ce qui nous donne les enregistrements suivants :
mysql> SELECT *
-> FROM ventes
-> ORDER BY `date`, `heure`;
+------+------------+----------+--------+
| num | date | heure | prix |
+------+------------+----------+--------+
| 183 | 1995-01-13 | 10:47:36 | 400.00 |
| 183 | 1995-01-13 | 11:45:12 | 450.00 |
| 183 | 1995-01-13 | 16:45:53 | 412.00 |
| 183 | 1995-01-14 | 12:47:36 | 410.00 |
| 183 | 1995-01-14 | 13:45:12 | 480.00 |
| 183 | 1995-01-14 | 17:45:53 | 402.00 |
+------+------------+----------+--------+
6 rows in set (0.00 sec)
Partant de là, je devrais obtenir deux lignes de données, voici comment j'ai procédé :
mysql> SELECT
-> v1.`num`, v1.`date`,
-> MIN(v1.`heure`) as Heure_mini,
-> MAX(v2.`heure`) as Heure_maxi,
-> MIN(v3.`prix`) as Prix_mini,
-> MAX(v4.`prix`) as Prix_maxi
-> FROM ventes v1
-> INNER JOIN ventes v2
-> ON v1.`date` = v2.`date`
-> INNER JOIN ventes v3
-> ON v1.`date` = v3.`date`
-> INNER JOIN ventes v4
-> ON v1.`date` = v4.`date`
-> GROUP BY v1.`date`;
+------+------------+------------+------------+-----------+-----------+
| num | date | Heure_mini | Heure_maxi | Prix_mini | Prix_maxi |
+------+------------+------------+------------+-----------+-----------+
| 183 | 1995-01-13 | 10:47:36 | 16:45:53 | 400.00 | 450.00 |
| 183 | 1995-01-14 | 12:47:36 | 17:45:53 | 402.00 | 480.00 |
+------+------------+------------+------------+-----------+-----------+
2 rows in set (0.00 sec)
Mon point de repère ne peut pas être "num" qui est commun à toutes les lignes, donc j'ai pris la date, mais j'ai virtualisé la table en utilisant trois copies de façon à obtenir des agrégats indépendants les unes des autres.
Enjoy! ;)
______________________________________________________________
Une question bien formulée, c'est un problème bien compris : ça représente déjà les 3/4 de la réponse ;)