如何从SQL中的两个表中获取最小值和最大值

如何从SQL中的两个表中获取最小值和最大值,sql,oracle,group-by,oracle-sqldeveloper,minmax,Sql,Oracle,Group By,Oracle Sqldeveloper,Minmax,我正在尝试从最小ID(ID=1)和最大ID(ID=3)获取开始日期和结束日期,但我不确定如何检索。以下是我的资料- 表1和表2是源表。我试图得到像第三个表一样的输出 我的要求是从ID的第一条记录获取开始日期,从ID的最后一条记录获取结束日期,我们可以借助ID字段识别第一条和最后一条记录。若ID为min,则表示第一条记录,ID为max,则表示最后一条记录 请帮帮我 这里有一个选择;假定您使用Oracle(关于您使用Oracle SQL Developer),x内联视图选择 开始日期属于名称,该

我正在尝试从最小ID(ID=1)和最大ID(ID=3)获取开始日期和结束日期,但我不确定如何检索。以下是我的资料-

表1和表2是源表。我试图得到像第三个表一样的输出

我的要求是从ID的第一条记录获取开始日期,从ID的最后一条记录获取结束日期,我们可以借助ID字段识别第一条和最后一条记录。若ID为min,则表示第一条记录,ID为max,则表示最后一条记录


请帮帮我

这里有一个选择;假定您使用Oracle(关于您使用Oracle SQL Developer),
x
内联视图选择

  • 开始日期
    属于
    名称
    ,该
    名称的
    ID
    列值最低(即按ID按名称顺序划分的第一个值)
  • 结束日期
    属于
    名称
    ,该
    名称的
    ID
    列值最高(即按名称顺序按ID描述划分第一个值)


我正试图从最小ID(ID=1)和最大ID(ID=3)获取开始日期和结束日期,但为什么?日期按升序排列,为什么需要使用ID?我的要求是从PID的第一条记录获取开始日期,从最后一条PID获取结束日期,这样我就可以借助
ID
识别第一条和最后一条记录。若ID为min表示第一条记录,ID为max,则表示最后一条记录A,好的,我理解。我写了一个新的查询并编辑了我的答案。请看一看,谢谢!这就是我要找的。。。!非常感谢您的时间和帮助:)
SQL> with
  2  -- sample data
  3  t1 (pid, name) as
  4    (select 123, 'xyz' from dual union all
  5     select 234, 'pqr' from dual
  6    ),
  7  t2 (id, name, start_date, end_date) as
  8    (select 1, 'xyz', date '2020-01-01', date '2020-07-20' from dual union all
  9     select 2, 'xyz', date '2020-02-01', date '2020-05-30' from dual union all
 10     select 3, 'xyz', date '2020-06-30', date '2020-07-30' from dual union all
 11     --
 12     select 1, 'pqr', date '2020-04-30', date '2020-09-30' from dual union all
 13     select 2, 'pqr', date '2020-05-30', date '2020-09-30' from dual union all
 14     select 3, 'pqr', date '2020-06-30', date '2020-07-01' from dual
 15    )
 16  select a.pid,
 17         x.name,
 18         max(x.start_date) start_date,
 19         max(x.end_date)   end_date
 20  from t1 a join
 21      (
 22        -- start_date: always for the lowest  T2.ID value row
 23        -- end_date  : always for the highest T2.ID value row
 24        select b.name,
 25               first_value(b.start_date) over (partition by b.name order by b.id     ) start_date,
 26               first_value(b.end_date)   over (partition by b.name order by b.id desc) end_date
 27        from t2 b
 28       ) x
 29       on a.name = x.name
 30  group by a.pid,
 31           x.name
 32  order by a.pid;

       PID NAME START_DATE END_DATE
---------- ---- ---------- ----------
       123 xyz  01/01/2020 07/30/2020
       234 pqr  04/30/2020 07/01/2020

SQL>