Bonjour,
J'ai une table du genre
Code :
1
2
3
4
5
6
7
8
9
10
 
CREATE TABLE "RESERVATION" 
(
  "IDCLIENT"	VARCHAR(10) NOT NULL,
  "NOM"	VARCHAR(60) NOT NULL,
  "DEBUT"	DATE NOT NULL,
  "FIN"	DATE NOT NULL,
  "CHAMBRE" VARCHAR(2) NOT NULL,
 PRIMARY KEY ("IDCLIENT")
);
Et soit les lignes suivantes dans la table:

IDCLIENT NOM DEBUT FIN CHAMBRE
01 AA 01/04/2010 17/05/2010 01
02 BB 18/05/2010 13/06/2010 02
03 CC 14/06/2010 14/07/2010 01
04 DD 15/07/2010 19/08/2010 04
05 EE 15/07/2010 19/08/2010 03
Moi je veux par une requête SQL en Interbase, recupérer la dernière reservation de la table suivant la date de DEBUT. Les colonnes renvoyées sont: DEBUT, FIN, MOIS_ANNEE avec MOIS_ANNEE la colonne renommée qui renvoit que le mois en lettre et l'année.
NB Pas de doublon

Dans notre table, nous aurons:

DEBUT FIN MOIS_ANNEE


15/07/2010 19/08/2010 JUILLET 2010
Soit la requête que j'effectue:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
SELECT R.DEBUT, R.FIN,
CASE WHEN EXTRACT(MONTH FROM R.DEBUT)= 1 THEN 'JANVIER' || '  ' || EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 2 THEN 'FEVRIER' || '  ' ||  EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 3 THEN 'MARS' || '  ' ||  EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 4 THEN 'AVRIL' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 5 THEN 'MAI' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 6 THEN 'JUIN' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 7 THEN 'JUILLET' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 8 THEN 'AOÛT' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 9 THEN 'SEPTEMBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 10 THEN 'OCTOBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 11 THEN 'NOVEMBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 12 THEN 'DECEMBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
  END AS MOIS_ANNEE
FROM RESERVATION R
WHERE R.DEBUT = (SELECT MAX(R2.DEBUT) FROM RESERVATION R2)
En faisant cette requête, je reçois les deux dernières lignes de ma table
Soit:

DEBUT FIN MOIS_ANNEE


15/07/2010 19/08/2010 JUILLET 2010
15/07/2010 19/08/2010 JUILLET 2010
Pour que ça m'envoie juste une ligne, j'ai utilisé le mot DISTINCT du genre:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT DISTINCT R.DEBUT, R.FIN,
CASE WHEN EXTRACT(MONTH FROM R.DEBUT)= 1 THEN 'JANVIER' || '  ' || EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 2 THEN 'FEVRIER' || '  ' ||  EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 3 THEN 'MARS' || '  ' ||  EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 4 THEN 'AVRIL' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 5 THEN 'MAI' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 6 THEN 'JUIN' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 7 THEN 'JUILLET' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 8 THEN 'AOÛT' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 9 THEN 'SEPTEMBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 10 THEN 'OCTOBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 11 THEN 'NOVEMBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 12 THEN 'DECEMBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
  END AS MOIS_ANNEE
FROM RESERVATION R
WHERE R.DEBUT = (SELECT MAX(R2.DEBUT) FROM RESERVATION R2)


Et là je reçois un méssage d'erreur du genre:
---------------------------
Erreur
---------------------------
data type not supported for arithmetic.
---------------------------
OK
---------------------------
J'attends vos remarques et propositions.