SQL查询,为表中每个唯一的值对选择第一行

SQL查询,为表中每个唯一的值对选择第一行,sql,oracle,Sql,Oracle,我试图跨两个表进行查询,然后根据每个序列id的最大时间值细化结果,以仅提供最新记录 我尝试了许多组合,包括分组方式、排序方式、最大值、分区以及其他建议。不幸的是,到目前为止,我看到的所有解决方案都只使用一个表,并且只返回感兴趣的一对列 我尝试过的查询: 选择a.trip、a.sequence\u id、a.time、a.point\u id 从th开始,ti作为 内连接 选择行程、最大顺序、时间、点 从th,ti 分组旅行 如g.sequence\u id=a.sequence\u id上的g

我试图跨两个表进行查询,然后根据每个序列id的最大时间值细化结果,以仅提供最新记录

我尝试了许多组合,包括分组方式、排序方式、最大值、分区以及其他建议。不幸的是,到目前为止,我看到的所有解决方案都只使用一个表,并且只返回感兴趣的一对列

我尝试过的查询:

选择a.trip、a.sequence\u id、a.time、a.point\u id 从th开始,ti作为 内连接 选择行程、最大顺序、时间、点 从th,ti 分组旅行 如g.sequence\u id=a.sequence\u id上的g 选择行程、顺序、时间、点 从th,ti 其中ti.sequence\u id=th.sequence\u id 和按th.sequence\u id=1划分的行数 考虑到表格“th”和“ti”

我需要一个查询,该查询只返回时间值最大的序列id中突出显示的行

我们正在使用Oracle数据库

关于这个主题,我已经研究了很多关于SO的帖子,但是没有找到任何使用多个表并为其他列返回结果的帖子,这是对value/pair列的补充。

试试这个

   select * from (
    select th.trip, ti.sequence_id, ti.time, ti.point_id,row_number() over (partition by th.sequence_id order by ti.time desc) rn FROM th, ti 
    where ti.sequence_id = th.sequence_id)
    where rn=1
试试这个

   select * from (
    select th.trip, ti.sequence_id, ti.time, ti.point_id,row_number() over (partition by th.sequence_id order by ti.time desc) rn FROM th, ti 
    where ti.sequence_id = th.sequence_id)
    where rn=1

您需要一个窗口函数:

查询将类似于:

select trip, sequence_id, time, point_id, 
       row_number() over (partition by sequence_id, trip, point_id order by time desc) as rownum
  from ti inner join th using(sequence_id)
  where rownum = 1

上面是伪SQL,您可以对其进行调整,但想法就在这里

您需要一个窗口函数:

查询将类似于:

select trip, sequence_id, time, point_id, 
       row_number() over (partition by sequence_id, trip, point_id order by time desc) as rownum
  from ti inner join th using(sequence_id)
  where rownum = 1

上面是伪SQL,您可以对其进行调整,但想法就在这里

以下查询必须对您有所帮助:

SELECT 
    DISTINCT ti.sequence_id, 
    MAX(th.time) OVER (PARTITION BY ti.sequence_id)
FROM ti
INNER JOIN th 
ON ti.sequence_id = th.sequence_id
ORDER BY ti.sequence_id;
MAX返回行块上的最大第次时间。由字段ti.sequence\u id划分或分组的行块

ORDERBY子句是可选的,我希望结果按您突出显示的顺序显示


希望这对您有所帮助。

下面的查询一定会对您有所帮助:

SELECT 
    DISTINCT ti.sequence_id, 
    MAX(th.time) OVER (PARTITION BY ti.sequence_id)
FROM ti
INNER JOIN th 
ON ti.sequence_id = th.sequence_id
ORDER BY ti.sequence_id;
MAX返回行块上的最大第次时间。由字段ti.sequence\u id划分或分组的行块

ORDERBY子句是可选的,我希望结果按您突出显示的顺序显示


希望这有帮助。

您突出显示的行与您给出的所需内容的定义不一致。突出显示的行中,序列id的时间值最大,而序列id 68355的最大时间值为2018-08-10 10:48:43,您突出显示了2017-08-10:46:58。您的突出显示错误还是您的定义错误?我也对您唯一的一对值和一对列的最新记录感到困惑,但您的定义明确说明了一个列序列id。您一直提到的一对是什么,以及该对如何体现在您想要构建的逻辑中?这个示例数据不够健壮,或者这不是我们需要考虑的一对列。请澄清这两点,以便我们提供帮助。表格已更正。抱歉,突出显示有误导性。描述中的第一句话已被修改,以便澄清。您突出显示的行与您给出的所需内容的定义不一致。突出显示的行中,该序列的时间值最大,而序列的时间值为683552018-08-10 10:48:43您在其中突出显示了2017-08-10 10:46:58。您的突出显示错误还是您的定义错误?我也对您唯一的一对值和一对列的最新记录感到困惑,但您的定义明确说明了一个列序列id。您一直提到的一对是什么,以及该对如何体现在您想要构建的逻辑中?这个示例数据不够健壮,或者这不是我们需要考虑的一对列。请澄清这两点,以便我们提供帮助。表格已更正。很抱歉出现误导性的突出显示。描述中的第一句话已被修改以便于澄清。