Je vais faire une requête qui affiche la plus grande valeur d'un champs donné plus trois autres lignes
Exemple
SI Max(Annee) = 2006
Afficher (en ligne) 2006, 2007,2008,2009
SGBD : ACCESS
Je vais faire une requête qui affiche la plus grande valeur d'un champs donné plus trois autres lignes
Exemple
SI Max(Annee) = 2006
Afficher (en ligne) 2006, 2007,2008,2009
SGBD : ACCESS
Si Annee est unique dans la table
Sinon
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT a.Annee FROM laTable a INNER JOIN laTable b ON a.Annee <= b.Annee GROUP BY a.Annee HAVING COUNT(*) <= 4
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT DISTINCT a.Annee FROM laTable a INNER JOIN laTable b ON a.Annee <= b.Annee GROUP BY a.Annee HAVING COUNT(DISTINCT b.Annee) <= 4
Annee n'est pas unique, la deuxième ne fonction pas (c'est peut-être du au SGBD)
J'ai pris la première est faire de sorte à avoir une année unique en y insérant deux sous-requêtes.
Je n'ai que deux lignes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT a.Annee FROM (SELECT DISTINCT Annee FROM T_Periode) a INNER JOIN (SELECT DISTINCT Annee FROM T_Periode) b ON a.Annee <= b.Annee GROUP BY a.Annee HAVING COUNT(*) <= 4
2005
2006
alors que je cherche à avoir
2006
2007
2008
2009
Non, il n'y a que 2006 et 2005 dans la table.Envoyé par Médiat
Je veux la plus grande (2006) plus les 3 années qui la suivent (2007, 2008, 2009)
Comment veux-tu que ton SGBD te sorte des lignes qui ne sont pas dans les tables ?Envoyé par Bujuman
Le plus simple serait d'avoir une table Annees(Annee) contenant une liste d'années.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT a.Annee FROM annees AS a INNER JOIN ( SELECT MAX(t.annee) AS annee_max FROM MaTable AS t ) AS v WHERE a.annee BETWEEN v.annee_max AND v.annee_max + 3 ;
En y réfléchissant, tu as aussi une autre possibilité, mais pas très optimale à mon avis :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT MAX(annee) FROM MaTable UNION SELECT MAX(annee) + 1 FROM MaTable UNION SELECT MAX(annee) + 2 FROM MaTable UNION SELECT MAX(annee) + 3 FROM MaTable ;
Ben je n'écarte pas la possibilité de mettre une nouvelle table avec une centaine d'années dedans si ça reste la dernière solution
C'était la première qui m'était venue dans la tête,Envoyé par al1_24
C'est toujours prenable
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager