取出分组后每组的第一条记录(不用group by)按时间排序

--操作日志表

CREATE TABLE [dbo].[JobLog](

[JobLogId] [int] IDENTITY(1,1) NOT NULL,

[FunctionId] [nvarchar](20) NULL,

[OperateTime] [datetime]
NULL,

CONSTRAINT [PK_JobLog]
PRIMARY KEY CLUSTERED

(

[JobLogId] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS 
= ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

-- 操作日志表的所有记录

select *
from JobLog

查询结果:

1    001    2007-11-01

2    001    2007-11-02

3    001    2007-11-03

4    002    2007-11-04

5    002    2007-11-05

6    003    2007-11-06

7    004    2007-11-07

8    004    2007-11-08

9    005    2007-11-09

10  005    2007-11-10

-- 每个功能最后一次操作记录

SELECT * FROM JobLog A

WHERE JobLogId in

(SELECT TOP
1 JobLogId FROM
JobLog WHERE A.FunctionId = FunctionId ORDER BY OperateTime DESC)

查询结果:

3    001    2007-11-03

5    002    2007-11-05

6    003    2007-11-06

8    004    2007-11-08

10  005    2007-11-10

时间: 2024-12-04 18:44:20

取出分组后每组的第一条记录(不用group by)按时间排序的相关文章

SQL 查询每组的第一条记录

CREATE TABLE [dbo].[test1]( [program_id] [int] NULL, [person_id] [int] NULL ) ON [PRIMARY] /*查询每组分组中第一条记录*/ select * from test1 as a where a.person_id in ( select top 1 person_id from test1 where program_id = a.program_id); select * from ( select ROW

MySQL获取group后所有组的第一条数据

https://stackoverflow.com/a/28090544/8025086 https://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ 原文地址:https://www.cnblogs.com/buxizhizhoum/p/10658122.html

linq中分组查询而且获取每个分组中的第一条记录,数据用于分页绑定

LINQ分组取出第一条数据 Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: Id=2, Name="Test2" 以上list如果直接使用distinct方法进行过滤,仍然返回3条数据,而需要的结果是2条数据.下面给出解这个问题的方法: 方法1: Distinct 方法中使用的相等比较器.这个比较器需要重写Equals和GetHashCode方法,个人不推荐,感觉较

Oracle取查询结果数据的第一条记录SQL

Oracle取查询结果数据的第一条记录SQL: select * from (select * from <table> order by <key>) where rownum=1; select * from (select * from <table> order by <key> desc) where rownum=1;

Oracle-left join两表关联只取B表匹配到的第一条记录

背景:  A表.B表两表关联,关联出来的结果里B表有不止一条,需求是只要B表结果中的某一条(按某字段排序) 经过百度,发现 row_number() over(partition by a order by b desc)函数可用(需要说明下,order by 必须有缺少会报错),以下是数据环境及结果. 创建数据环境 create table A(ANAME varchar(20)); insert into A values('alan'); insert into A values('Ale

[mysql] 先按某字段分组再取每组中前N条记录

From: http://blog.chinaunix.net/uid-26729093-id-4294287.html 请参考:http://bbs.csdn.net/topics/330021260 create table t2 (    id int primary key,    gid    char,    col1    int,    col2    int) engine=myisam; insert into t2 values (1,'A',31,6),(2,'B',25

sql中筛选第一条记录【分组排序】

问题描述 我们现在有一张表titles,共有4个字段,分别是emp_no(员工编号),title(职位),from_date(起始时间),to_date(结束时间),记录的是员工在某个时间段内职位名称,因为会存在升职,转岗之类的,里面emp_no可能会对应多个职位,我们现在要取到所有员工最近的职位信息,包括离职员工. 本文介绍两种方法去实现结果: 方法一 嵌套一个group by+max()子查询获取最近的职位信息. 思路 通过对emp_no分组取每个emp_no对应的最大的from_date:

CI codeigniter 查询 db query 返回 二维数组 返回 第一条记录

$r = $this->db->query("SELECT * FROM ych_borrow WHERE user_id=2"); $r->result_array();//返回二位数组 $r->row_array();//返回第一条数据的一维数组

取得left join的第二表中符合条件的第一条记录

问题描述 有表一 tableA tid     username     title 1         lily       我公司将进行xx培训 2        angus      关于秋游的通知 3        boss       这个月不发奖金 4        vivi       新产品上市 表二 tableB tid      time     txt 1        0809    大家快来.... 2        0810    我是新来的,大家好 2