按列分组并获取sql上的最大和最小id

按列分组并获取sql上的最大和最小id,sql,oracle,group-by,Sql,Oracle,Group By,我有一张有“论文”栏的桌子: 真实身份,真实日期,真实姓名 我想做一个查询,得到这样一个名为groupby的结果 NAME | MAX(DATE_REAL) | ID_REAL of the MAX(DATE_REAL) | MIN(DATE_REAL) | ID_REAL of the MIN(DATE_REAL) 我现在不知道怎么做 select NAME_REAL,max(DATE_REAL),ID_REAL from MYREALTABLE group by NAME_REAL,ID_

我有一张有“论文”栏的桌子: 真实身份,真实日期,真实姓名

我想做一个查询,得到这样一个名为groupby的结果

NAME | MAX(DATE_REAL) | ID_REAL of the MAX(DATE_REAL) | MIN(DATE_REAL) | ID_REAL of the MIN(DATE_REAL)
我现在不知道怎么做

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
但这不是我需要的,而且我只需要一个查询


谢谢

您可以将两个结果合并到一个查询结果中,如下所示

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

您可以将两个结果合并到一个查询结果中,如下所示

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
试试下面的方法-

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
试试下面的方法-

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

我认为,通过查找每个名称具有最小和最大日期的记录,并将这两个查询连接起来,可以实现以下功能

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


我认为,通过查找每个名称具有最小和最大日期的记录,并将这两个查询连接起来,可以实现以下功能

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


Post样本数据和所需输出Post样本数据和所需输出