查找相同记录的最大日期的行

来源:互联网 发布:淘宝上回收手机骗局 编辑:程序博客网 时间:2024/05/17 10:53

假设有这样一张门禁记录表,姓名,打卡地点,和日期,一个姓名可以有多个日期,那么,怎样查询一个姓名对应的最大日期的那一行记录呢?

以下介绍2种方法来实现。


首先创建测试表:

create table TableA
(
Names VARCHAR(20),GateNo INT ,D_Date date
)
INSERT INTO TableA VALUES('张三',1,'2017-09-30')
INSERT INTO TableA VALUES('张三',2,'2017-09-29')
INSERT INTO TableA VALUES('李四',2,'2017-09-30')
INSERT INTO TableA VALUES('李四',3,'2017-09-26')
INSERT INTO TableA VALUES('李四',2,'2017-09-15')
INSERT INTO TableA VALUES('张三',3,'2017-05-15')


方法一:使用MAX()函数来查询:

SELECT a.Names,a.GateNo,a.D_Date FROM dbo.TableA a WHERE a.D_Date = (SELECT MAX(b.D_Date) FROM dbo.TableA b WHERE a.Names=b.Names)


方法二:使用ROW_NUMBER()函数来查询:

SELECT a.Names,a.GateNo,a.D_Date 
FROM (
SELECT Names,GateNo,D_Date,ROW_NUMBER() OVER(PARTITION BY Names ORDER BY D_Date DESC) AS rows
FROM dbo.TableA 
) a WHERE a.rows = 1


效果如下图所示:










原创粉丝点击