2013-02-11 47 views
0

人的时候:需要选择部门最新登记的人加入

Id Name 
1 Anton 
2 Ib 
3 Knud 
4 Hans 

报名:

Id PersonId Status DateTime  Department 
5 1   1  11-1-2013 10:00 1 
6 1   0  10-1-2013 09:00 1 
7 1   2  10-1-2013 14:05 1 
8 1   2  09-1-2013 09:00 1 
9 2   2  09-1-2013 09:00 2 
10 3   2  09-1-2013 09:00 3 
11 4   2  10-1-2013 17:00 1 

,我需要选择最新的注册(由人)一天(10-1-2013)部门1

预期产出:

Name R.Id P.Id Status DateTime  Department 

Anton 7  1  2  10-1-2013 14:05 1 
Hans 11  4  2  10-1-2013 17:00 1 

回答

2

我觉得你只是想这样的:

select top 1 p.name, r.id, p.id, r.status, r.datetime, r.department 
from registration r join 
    person p 
    on r.personid = p.personid 
where department = 1 and cast(daTetime as date) = '10-1-2013' 
order by datetime desc 

按部门最新的注册,而不是人。这只是使用where子句按日期和部门进行筛选,按datetime列排序并选择第一个。

为了让所有的人:

select p.name, r.id, p.id, r.status, r.datetime, r.department 
from (select r.*, row_number() over (partition by person order by datetime desc) as seqnum 
     from registration r 
     where department = 1 and cast(daTetime as date) = '10-1-2013' 
    ) r join 
    person p 
    on r.personid = p.personid 
where seqnum = 1 
order by datetime desc 
+0

天哪,那是快..它的工作原理:) – Andreas 2013-02-11 19:35:38

+0

戈登·利诺夫我觉得这是你的更新版中的问题 '选择顶部1 p.name ,r.id,p.id,r.status,r.created,r.departmentid from checkin r join person p on r.personid = p.id and r.seqnum = 1 where r.departmentid =' 7AF20674-AEC1-4D4C-B1EA-88B1D7E8F3DB'and cast(r。创建日期)= '10 -1-2013' order by r.created desc' 列名称'seqnum'无效。 – Andreas 2013-02-11 19:41:44

+0

@Andreas。 。 。你是对的。从我误解了这个问题的版本中,剩余了“seqnum”。 – 2013-02-11 19:46:23