Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sous-Requête

3 réponses
Avatar
Christine Imbeault
Bonjour à tous,

J'ai quelques difficutés avec les sous-requêtes. Je fais donc appel à vos
connaissances. J'aimerais qu'il m'affiche les personnes qui ont le max de la
date en vigueur

---------------------------------------
Résultat

Matricule Date Groupe
a 2010-01-01 C
b 2010-01-01 H
-----------------------------------------

Table 1

Matricule Tâche
a 1
b 2
c 3

Table 2

Matricule DateVigueur Groupe
a 2010-01-01 C
a 2009-01-01 H
a 2008-01-01 I
b 2010-01-01 H
b 2009-01-01 U
b 2008-01-01 C

Merci à l'avance et bonne fin de semaine
Christine

3 réponses

Avatar
Fred BROUARD
Bonjour,

CREATE TABLE Table1 (Matricule CHAR(1), Tache INT);
INSERT INTO Table1 VALUES ('a', 1),
('b', 2),
('c', 3);
GO

CREATE TABLE Table2 (Matricule CHAR(1), DateVigueur DATE, Groupe CHAR(1));
INSERT INTO Table2 VALUES ('a', '2010-01-01', 'C'),
('a', '2009-01-01', 'H'),
('a', '2008-01-01', 'I'),
('b', '2010-01-01', 'H'),
('b', '2009-01-01', 'U'),
('b', '2008-01-01', 'C');

WITH
T1 AS
(SELECT Matricule, MAX(DateVigueur) AS MaxDateVigueur
FROM Table2
GROUP BY Matricule)
SELECT T1.Matricule, MaxDateVigueur, Groupe
FROM T1
INNER JOIN Table2 AS M
ON T1.Matricule = M.Matricule
AND T1.MaxDateVigueur = M.DateVigueur

Au passage votre table TABLE 1 ne sert à rine.

PS : offrez vous un bon cours de SQL. Mon site web, comme mon ouvrage
peuvent vous y aider !

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************

Christine Imbeault a écrit :
Bonjour à tous,

J'ai quelques difficutés avec les sous-requêtes. Je fais donc appel à vos
connaissances. J'aimerais qu'il m'affiche les personnes qui ont le max de la
date en vigueur

---------------------------------------
Résultat

Matricule Date Groupe
a 2010-01-01 C
b 2010-01-01 H
-----------------------------------------

Table 1

Matricule Tâche
a 1
b 2
c 3

Table 2

Matricule DateVigueur Groupe
a 2010-01-01 C
a 2009-01-01 H
a 2008-01-01 I
b 2010-01-01 H
b 2009-01-01 U
b 2008-01-01 C

Merci à l'avance et bonne fin de semaine
Christine



Avatar
zoltix
On 6 fév, 09:16, Fred BROUARD wrote:
Bonjour,

CREATE TABLE Table1 (Matricule CHAR(1),  Tache INT);
INSERT INTO Table1 VALUES ('a',                1),
                           ('b',                2),
                           ('c',                3);
GO

CREATE TABLE Table2 (Matricule CHAR(1), DateVigueur DATE, Groupe CHAR(1)) ;
INSERT INTO Table2 VALUES ('a',               '2010-01-01',     'C'),
                           ('a',               '2009-01-01',     'H'),
                           ('a',               '2008-01-01',     'I'),
                           ('b',               '2010-01-01',     'H'),
                           ('b',               '2009-01-01',     'U'),
                           ('b',               '2008-01-01',     'C');

WITH
T1 AS
(SELECT Matricule, MAX(DateVigueur) AS MaxDateVigueur
  FROM   Table2
  GROUP  BY Matricule)
SELECT  T1.Matricule, MaxDateVigueur, Groupe
FROM    T1
         INNER JOIN Table2 AS M
               ON T1.Matricule = M.Matricule
                  AND T1.MaxDateVigueur = M.DateVigue ur

Au passage votre table TABLE 1 ne sert à rine.

PS : offrez vous un bon cours de SQL. Mon site web, comme mon ouvrage
peuvent vous y aider !

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langag e SQL
Le site sur le langage SQL et les SGBDR  :  http://sqlpro.developpez. com
Audit, conseil, expertise, formation, modélisation, tuning, optimisatio n
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technolog ies
***********************http://www.sqlspot.com*************************

Christine Imbeault a écrit :

> Bonjour à tous,

> J'ai quelques difficutés avec les sous-requêtes.  Je fais donc ap pel à vos
> connaissances.  J'aimerais qu'il m'affiche les personnes qui ont le m ax de la
> date en vigueur

> ---------------------------------------
> Résultat

> Matricule      Date           Groupe
> a               2010-01-01     C
> b               2010-01-01     H
> -----------------------------------------

> Table 1

> Matricule  Tâche
> a                1
> b                2
> c                3

> Table 2

> Matricule   DateVigueur Groupe
> a               2010-01-01     C
> a               2009-01-01     H
> a               2008-01-01     I
> b               2010-01-01     H
> b               2009-01-01     U
> b               2008-01-01     C

> Merci à l'avance et bonne fin de semaine
> Christine



De plus en plus, tu écris ton code avec du CTE, il y a des raisons
pour cela, performance, clarté du code ....?
Avatar
SQLpro
1) plus lisible
2) plus facile de poser les bon index

A +

On 8 fév, 12:44, zoltix wrote:
On 6 fév, 09:16, Fred BROUARD wrote:



> Bonjour,

> CREATE TABLE Table1 (Matricule CHAR(1),  Tache INT);
> INSERT INTO Table1 VALUES ('a',                1),
>                            ('b',                2),
>                            ('c',                3);
> GO

> CREATE TABLE Table2 (Matricule CHAR(1), DateVigueur DATE, Groupe CHAR(1 ));
> INSERT INTO Table2 VALUES ('a',               '2010-01-01 ',     'C'),
>                            ('a',               '2009-01-01',     'H'),
>                            ('a',               '2008-01-01',     'I'),
>                            ('b',               '2010-01-01',     'H'),
>                            ('b',               '2009-01-01',     'U'),
>                            ('b',               '2008-01-01',     'C');

> WITH
> T1 AS
> (SELECT Matricule, MAX(DateVigueur) AS MaxDateVigueur
>   FROM   Table2
>   GROUP  BY Matricule)
> SELECT  T1.Matricule, MaxDateVigueur, Groupe
> FROM    T1
>          INNER JOIN Table2 AS M
>                ON T1.Matricule = M.Matricule
>                   AND T1.MaxDateVigueur = M.DateVig ueur

> Au passage votre table TABLE 1 ne sert à rine.

> PS : offrez vous un bon cours de SQL. Mon site web, comme mon ouvrage
> peuvent vous y aider !

> --
> Frédéric BROUARD, MVP SQL Server, expert bases de données et lang age SQL
> Le site sur le langage SQL et les SGBDR  :  http://sqlpro.developpe z.com
> Audit, conseil, expertise, formation, modélisation, tuning, optimisat ion
> Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technol ogies
> ***********************http://www.sqlspot.com*************************

> Christine Imbeault a écrit :

> > Bonjour à tous,

> > J'ai quelques difficutés avec les sous-requêtes.  Je fais donc appel à vos
> > connaissances.  J'aimerais qu'il m'affiche les personnes qui ont le max de la
> > date en vigueur

> > ---------------------------------------
> > Résultat

> > Matricule      Date           Groupe
> > a               2010-01-01     C
> > b               2010-01-01     H
> > -----------------------------------------

> > Table 1

> > Matricule  Tâche
> > a                1
> > b                2
> > c                3

> > Table 2

> > Matricule   DateVigueur Groupe
> > a               2010-01-01     C
> > a               2009-01-01     H
> > a               2008-01-01     I
> > b               2010-01-01     H
> > b               2009-01-01     U
> > b               2008-01-01     C

> > Merci à l'avance et bonne fin de semaine
> > Christine

De plus en plus, tu écris ton code avec du CTE, il y a des raisons
pour cela, performance, clarté du code ....?