在case语句或where子句中选择Max Date

时间:2017-06-15 10:50:08

标签: tsql

我有2列1)id(int)和2)Date。我想在最大日期选择id。分组结果返回id / s /多个id。相反,我只想在最大日期检索id。

2 个答案:

答案 0 :(得分:1)

我确信有更简单的方法可以做到这一点,但下面应该可以正常工作。

-- create sample data
create table #temp(ID int, courseID int, end_date datetime)
go
insert into #temp
select 1 , 11 , getdate() 
union
select 1, 12, getdate()-20
union
select 1, 13, getdate()-40
union
select 2, 13, getdate()-70
union
select 2, 14, getdate()-80

-- create temp table to calculate correct date
select id, max(end_date) as correctDate
into #temp2
from #temp
group by id

-- final desired outup
select #temp2.id , #temp.courseID
from #temp2
inner join #temp
    on #temp2.id = #temp.id
    and #temp2.correctDate = #temp.end_date

-- drop temp tables
drop table #temp
drop table #temp2
如果您有任何问题,请给我一个喊叫

答案 1 :(得分:1)

更简单的替代

-- create sample data
create table #temp(id int, courseID int, end_date datetime)

go
insert into #temp
select
    1 , 11 , getdate() 
union
select
    1, 12, getdate()-20
union
select
    1, 13, getdate()-40
union
select
    2, 13, getdate()-70
union
select
    2, 14, getdate()-80


SELECT * FROM(
SELECT DENSE_RANK() OVER(PARTITION BY id ORDER BY end_date DESC ) sira, id,courseID,end_date  FROM #temp  
) t WHERE sira = 1

-- drop temp tables
drop table #temp
drop table #temp2