oracle sql每天每个唯一字段2条记录,如何获取最新信息

oracle sql每天每个唯一字段2条记录,如何获取最新信息,sql,oracle,Sql,Oracle,以下是表格结构: ID FIELD_A FIELD_B DATE_FIELD VALUE_FIELD ID字段只是一个随每条记录递增的数字。我们在一天内得到两组记录,其中字段a、字段B、日期字段完全相同,但值字段可以不同。我们有早班车和晚班车。您可以判断哪个是哪个,因为该组记录的ID值较低(因为它们是先插入的),而该组记录的ID值较高(因为它们是在之后插入的) 问题是,如果我想有一个查看每个记录的字段a、字段B、日期字段的最高ID值的视图,我该怎么做?基本上,在我看来,我不在乎早晨的场景,只想

以下是表格结构:

ID
FIELD_A
FIELD_B
DATE_FIELD
VALUE_FIELD
ID字段只是一个随每条记录递增的数字。我们在一天内得到两组记录,其中字段a、字段B、日期字段完全相同,但值字段可以不同。我们有早班车和晚班车。您可以判断哪个是哪个,因为该组记录的ID值较低(因为它们是先插入的),而该组记录的ID值较高(因为它们是在之后插入的)


问题是,如果我想有一个查看每个记录的字段a、字段B、日期字段的最高ID值的视图,我该怎么做?基本上,在我看来,我不在乎早晨的场景,只想看晚上的场景。但是,如果我们仍然在早上,那么当天的“最高”ID值将是当时唯一的ID值,因此max(ID)将至少为我们提供当天早上的ID值。

您将使用分析函数
行数()


函数
row\u number()
为组内的行(由
partition
子句定义)分配一个顺序值。id最高的一个获得值
1
,然后是其余值(由
order by
子句定义)。

您可以使用分析函数
行号()


函数
row\u number()
为组内的行(由
partition
子句定义)分配一个顺序值。id最高的一个得到值
1
,然后是其余的(由
order by
子句定义)。

实际上,有点让我想起了问题:)。类似的方法应该会奏效:

    CREATE VIEW afternoon AS
    SELECT t1.* FROM table t1 INNER JOIN table t2 
    ON t1.field_a = t2.field_a AND t1.field_b = t2.field_b 
    AND t1.date_field = t2.date_field AND t1.id > t2.id

事实上,这让我想起了一个问题:)。类似的方法应该会奏效:

    CREATE VIEW afternoon AS
    SELECT t1.* FROM table t1 INNER JOIN table t2 
    ON t1.field_a = t2.field_a AND t1.field_b = t2.field_b 
    AND t1.date_field = t2.date_field AND t1.id > t2.id

如果任何人需要在不支持分区的SQL环境中工作的答案,我认为您也可以使用:

create view my_view as SELECT * FROM my_table WHERE id IN
   (SELECT max(id) FROM my_table GROUP BY field_a, field_b, date_field)

如果任何人需要在不支持分区的SQL环境中工作的答案,我认为您也可以使用:

create view my_view as SELECT * FROM my_table WHERE id IN
   (SELECT max(id) FROM my_table GROUP BY field_a, field_b, date_field)

很不错的。非常感谢。我能将这一点转化为我的具体情况,效果很好。非常感谢。我能把这句话翻译成我的具体情况,它起了作用。我试着这么做,但在我的情况下,这是缓慢的。此表有1.24亿多条记录。我接受的解决方案对我来说基本上是即时的。很高兴知道。谢谢你的评论。我试着这样做,但在我的情况下,这是缓慢的。此表有1.24亿多条记录。我接受的解决方案对我来说基本上是即时的。很高兴知道。谢谢你的评论。