AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 2361
Accepted
Andy
Andy
Asked: 2011-04-26 03:30:42 +0800 CST2011-04-26 03:30:42 +0800 CST 2011-04-26 03:30:42 +0800 CST

每个子集的 MAX

  • 772

我有一个看起来像这样的表:

+---------------------------------------------+
| EVENT_ID | ITEM_ID | PERSON_ID | EVENT_DATE |
+---------------------------------------------+
| 123      | 1       | 2         | 21-AUG-03  |
| 124      | 1       | 3         | 22-AUG-03  |
| 125      | 1       | 45        | 23-AUG-03  |
| 126      | 1       | (null)    | 24-AUG-03  |
| 127      | 2       | 2         | 25-AUG-03  |
| 128      | 2       | 6         | 26-AUG-03  |
| 129      | 2       | 1         | 27-AUG-03  |
+---------------------------------------------+

因此,我需要为每个 item_id 获取最新的 (MAX(event_date))、非空 person_id。我们为此提出了一种相当简单的 PL/SQL 方法,但试图用直接的 SQL 来完成这项工作。有人有想法吗?

顺便说一句,event_id 并不总是像这样连续。我们有两个冗余的数据库服务器。

提前谢谢。

oracle aggregate
  • 2 2 个回答
  • 3737 Views

2 个回答

  • Voted
  1. Leigh Riffel
    2011-04-26T04:25:09+08:002011-04-26T04:25:09+08:00

    以下只需要一次全表扫描。

    SELECT Item_ID, Person_ID, Event_Date FROM
    (
       SELECT Event_ID, Person_ID, Item_ID, Event_Date
          , MAX(EVENT_DATE) OVER (PARTITION BY Item_ID) HighEventDate 
       FROM Event_Table WHERE Person_ID IS NOT NULL
    )
    WHERE Event_Date = HighEventDate;
    
    • 7
  2. Best Answer
    bernd_k
    2011-04-26T04:25:36+08:002011-04-26T04:25:36+08:00

    尝试这个

    create table event_table (
        event_id int,
        item_id int,
        person_id int,
        event_date date
    );
    
    insert into event_table values (123, 1, 2,    to_date('21-aug-03','DD-MON-YY'));
    insert into event_table values (124, 1, 3,    to_date('22-aug-03','DD-MON-YY')); 
    insert into event_table values (125, 1, 45,   to_date('23-aug-03','DD-MON-YY'));  
    insert into event_table values (126, 1, null, to_date('24-aug-03','DD-MON-YY'));  
    insert into event_table values (127, 2, 2,    to_date('25-aug-03','DD-MON-YY'));  
    insert into event_table values (128, 2, 6,    to_date('26-aug-03','DD-MON-YY'));  
    insert into event_table values (129, 2, 1,    to_date('27-aug-03','DD-MON-YY'));  
    
    
    select * from event_table;
    
    select t1.item_id, t1.Person_id, t1.event_date
    from event_table t1
    join 
    (select item_id , max(event_date) max_event_date 
       from event_table where Person_id is not null group by item_id ) t2 
    on t1.item_id = t2.item_id and t1.event_date = t2.max_event_date;
    
    • 6

相关问题

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

  • ORDER BY 使用文本列的自定义优先级

  • 舒服的sqlplus界面?[关闭]

  • 如何在数据库中找到最新的 SQL 语句?

  • 如何使用正则表达式查询名称?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve