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 分组取最大时间记录:
第一种子查询方式:
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方式:
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
或
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方式:
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
结果都是一样的,至于效率求大神指教。
分享到:
相关推荐
MySql实现分组取n条最大记录,还在为分组取最大困扰么?
今天开发同学向我们提了一个紧急的需求,从集合mt_resources_access_log中,根据字段refererDomain分组,取分组中最近一笔插入的数据,然后将这些符合条件的数据导入到集合mt_resources_access_log_new中。...
使用Linq语法与Lambda表达式分组取泛型数组某列的最小值/最大值
按某一字段分组取最大(小)值所在行的数据
主要是介绍在 JDK8中使用 stream 流的 groupingBy 方法源进行最大值分组、最小值分组、平均值分组、统计分组
MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY分组取前N条记录实现方法。 这是测试表(也不知道怎么想的,当时表名直接敲了个aa,汗~~~~): ...
表:t_test -------------------------------------- id(int) cost(int) des Autoid(id) -------------------------------------- 1 10 aaaa 1 1 15 bbbb 2 1 20 cccc 3 ...取每一类id中cost最大的纪录
–按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: nameval memo a 2 a2(a的第二个值) a 1 a1–a的第一个值 a 3 a3:a的第三个值 b 1 b1–b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b ...
此文档中详细的记载了,SQL Server分组排序取数据的实现,希望可以帮到下载的朋友们!
VB 对查询结果分组 VB 对查询结果分组 VB 对查询结果分组
一、SQL与Sequelize中的分组查询 1.1 SQL中的分组查询 SQL查询中,通GROUP BY语名实现分组查询。GROUP BY子句要和聚合函数配合使用才能完成分组查询,在SELECT查询的字段中,如果没有使用聚合函数就必须出现在...
hive不直接支持分组取TopN的操作,需要自定义udf函数打成jar包添加到hive运行环境中
第十一章连接查询和分组查询.zip,第十一章连接查询和分组查询.zip,第十一章连接查询和分组查询.zip,第十一章连接查询和分组查询.zip
C#数据库分组条件查询代码C#数据库分组条件查询代码
有如下关系模式,分析每个关系模式的主码,外码,完成后面的查询 职员表:Emp(eid:integer;ename:string,salary:real) 部门表:Dept(did:integer,dname:string,managerid:integer,floornum:integer) 职员与部分的...
mysql获取分组后每组的最大值实例详解 1. 测试数据库表如下: create table test ( `id` int not null auto_increment, `name` varchar(20) not null default '', `score` int not null default 0, primary key...
这个范例主要是实现SQL查询中的分组查询,可以查询在一定的空间范围内各个地物的数目,这个在实践中很用的较广,比如查询某一区域内A类建筑、B类建筑、C类建筑的数目,有利于后续的小区的建设等等,但是这个查询只能...