J'ai une table avec ces colonnes: ID_REAL, DATE_REAL, NAME_REAL

Je veux faire une requête pour obtenir un résultat comme celui-ci avec un groupe par sur le nom

NAME | MAX(DATE_REAL) | ID_REAL of the MAX(DATE_REAL) | MIN(DATE_REAL) | ID_REAL of the MIN(DATE_REAL)

Je ne sais pas comment faire pour le moment que j'ai

select NAME_REAL,max(DATE_REAL),ID_REAL from MYREALTABLE group by NAME_REAL,ID_REAL
select NAME_REAL,min(DATE_REAL),ID_REAL from MYREALTABLE group by NAME_REAL,ID_REAL

Mais ce n'est pas ce dont j'ai besoin, et je n'ai besoin que d'une seule requête

Merci

0
DispNameSql 2 sept. 2020 à 10:55

3 réponses

Meilleure réponse

Je pense que ce qui suit devrait fonctionner en trouvant les enregistrements qui ont les dates minimum et maximum par nom et en joignant ces deux requêtes.

select 
    mn.NAME_REAL,
    MIN_DATE_REAL,
    ID_REAL_OF_MIN_DATE_REAL,
    MAX_DATE_REAL,
    ID_REAL_OF_MAXDATE_REAL
from
(
    select NAME_REAL,
        DATE_REAL as MIN_DATE_REAL,
        ID_REAL as ID_REAL_OF_MIN_DATE_REAL,
        from (
        select 
            NAME_REAL, 
            ID_REAL, 
            DATE_REAL, 
            row_number() over (partition by NAME_REAL order by DATE_REAL asc) as date_order_asc 
        from MYREALTABLE
        )
    where date_order_asc = 1
) mn
inner join
(
    select NAME_REAL,
        DATE_REAL as MAX_DATE_REAL,
        ID_REAL as ID_REAL_OF_MAX_DATE_REAL,
        from (
        select 
            NAME_REAL, 
            ID_REAL, 
            DATE_REAL, 
            row_number() over (partition by NAME_REAL order by DATE_REAL desc) as date_order_desc 
        from MYREALTABLE
        )
    where date_order_desc = 1
) mx
 on mn.NAME_REAL = mx.NAME_REAL

2
Philip Axt 2 sept. 2020 à 08:30

Essayez ci-dessous -

select NAME_REAL,ID_REAL,max(DATE_REAL) as max_date, min(DATE_REAL) as min_date
from MYREALTABLE 
group by NAME_REAL,ID_REAL
0
Fahmi 2 sept. 2020 à 08:13

Vous pouvez joindre les deux résultats en un seul résultat de requête comme suit

select o.NAME_REAL,o.max,o.id_real,t.min,o.id_real from (
select NAME_REAL,max(DATE_REAL) as max,ID_REAL, from MYREALTABLE group by NAME_REAL,ID_REAL)
as o inner join
(select NAME_REAL,min(DATE_REAL),ID_REAL from MYREALTABLE group by NAME_REAL,ID_REAL
) as t on o.NAME_REAL=t.NAME_REAL
0
saikumar voruganti 2 sept. 2020 à 08:04