`

分组查询取最大时间记录的多种方式

 
阅读更多

分组查询取最大时间记录的多种方式
    
    sql语句:
    [sql]
    create table dispatch_result  ( 
       dr_id                number                          not null, 
       sheet_id             number, 
       check_next           varchar(20), 
       check_time           date, 
       check_sn             char(8), 
       check_comment        varchar(255), 
       check_status         number, 
       constraint PK_RESULT primary key (dr_id) 
    );    
    
    表记录:
         DR_ID   SHEET_ID CHECK_NEXT           CHECK_TIME  CHECK_SN CHECK_COMMENT     CHECK_STATUS
    ---------- ---------- -------------------- ----------- -------- -------------------------------------------------------------------------------- ------------
             1          1 10001                2012/8/12 11:11:23 10000                                                                           1
             2          1 10002                2012/9/15 11:15:24 10001                                                                           2
             3          2 10001                2012/8/15 9:16:10   10000                                                                           1
             4          2 10002                2012/9/18 11:16:23 10001                                                                           2
查询以SHEET_ID 分组取最大时间记录:
第一种子查询方式:
    [sql]
    select * from dispatch_result dr where dr.check_time=( 
                      select max(check_time) from dispatch_result where sheet_id=dr.sheet_id) 
    
         DR_ID   SHEET_ID CHECK_NEXT           CHECK_TIME  CHECK_SN CHECK_COMMENT     CHECK_STATUS
    ---------- ---------- -------------------- ----------- -------- -------------------------------------------------------------------------------- ------------
             2          1 10002                2012/9/15 11:15:24           10001                                                      2
             4          2 10002                2012/9/18 11:16:23           10001                                   2
     
第二种group by方式:
    [sql]
    select t1.* from dispatch_result t1 right join 
            (select sheet_id,max(check_time) ct from dispatch_result group by sheet_id) t2 
                     on t2.sheet_id=t1.sheet_id and t2.ct=t1.check_time 
    
         DR_ID   SHEET_ID CHECK_NEXT           CHECK_TIME  CHECK_SN CHECK_COMMENT     CHECK_STATUS
    ---------- ---------- -------------------- ----------- -------- -------------------------------------------------------------------------------- ------------
             2          1 10002                2012/9/15 11:15:24           10001                                                      2
             4          2 10002                2012/9/18 11:16:23           10001                                         2
    或
    [sql]
    select * from dispatch_result  
           inner join (select max(dr.check_time) as check_time, dr.sheet_id from dispatch_result dr group by dr.sheet_id) t1  
                 using(check_time,sheet_id); 
      
    CHECK_TIME    SHEET_ID      DR_ID CHECK_NEXT           CHECK_SN CHECK_COMMENT     CHECK_STATUS
    ----------- ---------- ---------- -------------------- -------- -------------------------------------------------------------------------------- ------------
    2012/9/15 11:15:24           1          2 10002                10001                                                               2
    2012/9/18 11:16:23           2          4 10002                10001                                                               2

第三种partition by方式:
    [sql]
    select t2.* from  
           (select t1.*,row_number() over  
                   (partition by t1.sheet_id order by t1.check_time desc nulls last) rn from dispatch_result t1) t2 
                              where rn=1 
     
         DR_ID   SHEET_ID CHECK_NEXT           CHECK_TIME  CHECK_SN CHECK_COMMENT     CHECK_STATUS
    ---------- ---------- -------------------- ----------- -------- -------------------------------------------------------------------------------- ------------
             2          1 10002                2012/9/15 11:15:24           10001                                                      2
             4          2 10002                2012/9/18 11:16:23           10001                                                      2
分享到:
评论

相关推荐

    c语言实现冒泡排序、希尔排序等多种算法示例

    希尔排序的时间复杂度介于O(n)和O(n^2)之间,具体取决于所选的间隔序列。虽然希尔排序的效率比原始插入排序高,但它不是稳定的排序算法。 这些排序算法各有优缺点,适用于不同的场景。例如,对于小规模数据或部分...

    计算机二级《MySQL数据库程序设计》知识点总结.pdf

    10. **汇总数据**:使用聚集函数如`SUM`求和,`AVG`求平均,`COUNT`计数,`MAX`取最大值,`MIN`取最小值,可以对一组数据进行统计分析。 11. **分组数据**:`GROUP BY`用于按指定字段进行分组,`HAVING`过滤分组后...

    在水晶报表中使用Access数据库

    - 数据子集:只取必要的数据,避免查询全表。 - 缓存数据:利用水晶报表的缓存功能,提高数据检索速度。 10. 部署与发布: 设计完成后,报表可以通过水晶报表服务器或Web应用程序部署,供终端用户访问。水晶报表...

    sql代码_sql_

    3. **日期和时间函数**:处理日期和时间数据,如`DATE()`提取日期部分,`TIME()`提取时间部分,`NOW()`获取当前日期和时间,`DATE_ADD()`和`DATE_SUB()`添加或减去时间间隔。 4. **数学函数**:进行数学运算,如`...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle 甲骨文 获得最高认证级别的ISO标准安全认证,性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录。但价格不菲 大型企业 db2 IBM DB2在企业级的应用最为广泛, 在全球的500家最大的企业中,几乎85%以上用DB2...

    计算机网络(谢希仁第五版)习题答案

    若打算使总的时延为最小,问分组的数据部分长度p应取为多大? 为了使总的时延最小,我们需要找到分组的数据部分长度\(p\)的最优值。总时延\(D\)可以表示为: \[D = kd + \left(\frac{x}{p}\right)\left(\frac{p+h}...

    sql21自学通

    - **SQL总览**:SQL支持多种功能,包括数据查询(如SELECT)、数据定义(如CREATE TABLE)、数据操作(如INSERT、UPDATE、DELETE)和数据控制(如GRANT、REVOKE)等。 #### 二、查询——SELECT语句的使用 - **目标...

    九月全国计算机等级考试二级Access笔试试题含答案.pdf

    22. SQL聚合查询:GROUP BY语句结合MAX函数,按部门号分组并计算最大值,结果记录数取决于部门数量。 23. 窗体事件:退出系统的过程涉及到一系列事件,包括关闭、确认等。 24. 窗体打开事件顺序:打开 → 加载 → ...

    SQL最佳实践

    ##### 取表的前N条记录 在Oracle中,可以使用`ROWNUM`伪列来限制查询结果的行数。例如: ```sql SELECT * FROM table_name WHERE ROWNUM ; ``` ##### Decode & Case `DECODE`函数和`CASE`表达式都可以用来根据...

    用C实现的各类排序算法

    希尔排序的时间复杂度介于O(n)和O(n^2)之间,具体取决于增量序列的选择。 在`Sort.cpp`文件中,可能包含了这些排序算法的C语言实现。而`dataList.h`可能是一个头文件,定义了数据结构和函数原型,以便在排序过程中...

    sql 语句自学宝典

    - **你的第一个查询**:例如,查询某个表中的所有记录:`SELECT * FROM table_name`。 - **总结**:SELECT语句是SQL中最常用的命令之一,用于从数据库中检索数据。通过灵活使用不同的子句(如WHERE、ORDER BY等),...

    SQLserver21天自学通SQL21天自学通

    - **你的第一个查询**:通过简单的例子介绍如何编写基本的SELECT语句,例如从特定表中选择所有记录或特定列的记录。 - **总结**:强调SELECT语句的基础性和重要性,以及其在日常数据库管理工作中的应用。 #### 第三...

    十种排序算法介绍十种排序算法介绍

    - **时间复杂度**: 平均情况介于O(n)到O(n^2)之间,具体取决于增量序列的选择。 - **应用场景**: 适用于数据量较大的场景,特别是当数据分布均匀时效果较好。 5. **快速排序(Quick Sort)** - **原理**: 快速...

    数据结构实验报告(排序算法)

    希尔排序的时间复杂度取决于选取的间隔序列,通常比简单的O(n^2)要好。 4. **堆排序**(Heap Sort):利用完全二叉树的特性构建堆,然后交换堆顶元素与末尾元素,调整剩余元素重新成堆,如此反复。堆排序的平均和最...

    数据分析如何处理数据缺失问题.doc

    数据缺失是数据分析中常见的挑战,它可能导致分析结果的偏差,降低模型的准确性和可靠性。处理数据缺失问题至关重要,...同时,对数据集进行预处理时,应记录下处理过程,以便后续分析者了解数据的原始状态和处理方式。

    2021-2022计算机二级等级考试试题及答案No.1218.docx

    在计算机二级等级考试中,考生需要掌握多种知识点,包括但不限于Excel操作、数据库概念、数据类型、存储结构、链表操作、宏命令、编程基础、文件扩展名、属性值、数据类型限制、存储过程的使用以及SQL查询等。...

    《MySQL数据库开发》期末复习题.docx(共15页)

    - **默认值**:`TIMESTAMP`可以自动记录当前日期时间。 - **存储空间**:`TIMESTAMP`占用的空间较小。 以上就是根据《MySQL数据库开发》期末复习题文档中提取的关键知识点的详细介绍。通过这些知识点的学习,可以...

    SQL21日自学通,完整版

    - **日期/时间函数**:如`ADD_MONTHS`、`LAST_DAY`、`MONTHS_BETWEEN`等,用于处理日期和时间数据。 - **数学函数**:如`ABS`(取绝对值)、`CEIL`和`FLOOR`(向上/向下取整)、`COS`、`SIN`、`TAN`(三角函数)、`...

Global site tag (gtag.js) - Google Analytics