2013-02-11 73 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