创建表与表数据
CREATE TABLE tbMaxDate
(
Guid uniqueidentifier Primary Key default upper((replace(newid(),'-',''))) not null,
Name varchar(255) not null,
createTime datetime not null
)
insert into tbMaxDate(Guid,Name,createTime)values(NEWID(),'小绿','2019-04-10 09:38:53.793')
insert into tbMaxDate(Guid,Name,createTime)values(NEWID(),'小绿','2019-04-10 10:40:57.243')
insert into tbMaxDate(Guid,Name,createTime)values(NEWID(),'小绿','2019-04-11 09:56:53.433')
insert into tbMaxDate(Guid,Name,createTime)values(NEWID(),'小绿','2019-04-12 08:02:53.483')
insert into tbMaxDate(Guid,Name,createTime)values(NEWID(),'小红','2019-04-10 09:45:53.563')
insert into tbMaxDate(Guid,Name,createTime)values(NEWID(),'小红','2019-04-10 07:16:57.113')
insert into tbMaxDate(Guid,Name,createTime)values(NEWID(),'小红','2019-04-11 11:49:15.233')
insert into tbMaxDate(Guid,Name,createTime)values(NEWID(),'小红','2019-04-12 15:12:19.453')
select * from tbMaxDate order by name
1.取全表最大日期的记录
select * from tbMaxDate A where createTime=(select max(createTime) from tbMaxDate B where A.[Name]=B.[Name])
select * from tbMaxDate A where not exists (select 1 from tbMaxDate where name=A.name and createTime>A.createTime)
2.取某个时间段最大日期记录
在规定的时间里取最大日期记录应该在max中多加上规定时间条件,如下两图对比
select * from tbMaxDate A
where CONVERT(varchar, createTime, 23) ='2019-04-10'
and createTime=(select max(createTime) from tbMaxDate B where A.[Name]=B.[Name])
select * from tbMaxDate A
where CONVERT(varchar, createTime, 23) ='2019-04-10'
and not exists (select 1 from tbMaxDate where name=A.name and createTime>A.createTime)
select * from tbMaxDate A
where CONVERT(varchar, createTime, 23) ='2019-04-10'
and createTime=(select max(createTime) from tbMaxDate B where A.[Name]=B.[Name] and CONVERT(varchar, createTime, 23) ='2019-04-10')
select * from tbMaxDate A
where CONVERT(varchar, createTime, 23) ='2019-04-10'
and not exists (select 1 from tbMaxDate where name=A.name and createTime>A.createTime and CONVERT(varchar, createTime, 23) ='2019-04-10')
还有另外一种写法,通过子查询形式
select * from tbMaxDate A
where CONVERT(varchar, createTime, 23) ='2019-04-10'
and createTime=(
select max(createTime) from
(
select * from tbMaxDate
where CONVERT(varchar, createTime, 23) ='2019-04-10'
) B where A.[Name]=B.[Name]
)
select * from tbMaxDate A
where CONVERT(varchar, createTime, 23) ='2019-04-10'
and not exists (
select 1 from
(
select * from tbMaxDate
where CONVERT(varchar, createTime, 23) ='2019-04-10'
) temp where temp.name=A.name and temp.createTime>A.createTime
)
补充:两个日期之间的最大日期记录
3.取全表最小日期的记录
select * from tbMaxDate A where createTime=(select MIN(createTime) from tbMaxDate B where A.[Name]=B.[Name])
select * from tbMaxDate A where not exists (select 1 from tbMaxDate where name=A.name and createTime 4.取某个时间段最小日期记录 在规定的时间里取最小日期记录可以在min中加上规定时间条件,也可以不加,如下两图对比 select * from tbMaxDate A select * from tbMaxDate A select * from tbMaxDate A select * from tbMaxDate A 还有另外一种写法,通过子查询形式 select * from tbMaxDate A select * from tbMaxDate A 补充:两个日期之间的最小日期记录
where CONVERT(varchar, createTime, 23) ='2019-04-10'
and createTime=(select MIN(createTime) from tbMaxDate B where A.[Name]=B.[Name])
where CONVERT(varchar, createTime, 23) ='2019-04-10'
and not exists (select 1 from tbMaxDate where name=A.name and createTime
where CONVERT(varchar, createTime, 23) ='2019-04-10'
and createTime=(select MIN(createTime) from tbMaxDate B where A.[Name]=B.[Name] and CONVERT(varchar, createTime, 23) ='2019-04-10')
where CONVERT(varchar, createTime, 23) ='2019-04-10'
and not exists (select 1 from tbMaxDate where name=A.name and createTime
where CONVERT(varchar, createTime, 23) ='2019-04-10'
and createTime=(
select MIN(createTime) from
(
select * from tbMaxDate
where CONVERT(varchar, createTime, 23) ='2019-04-10'
) B where A.[Name]=B.[Name]
)
where CONVERT(varchar, createTime, 23) ='2019-04-10'
and not exists (
select 1 from
(
select * from tbMaxDate
where CONVERT(varchar, createTime, 23) ='2019-04-10'
) temp where temp.name=A.name and temp.createTime