2017-05-08 44 views
0

如何編寫查詢以顯示每個用戶的最新位置,類似於我的顯示方式?我四處搜索,但仍未能正確實施。我將如何查詢,以便顯示每個用戶最近的位置

+----------+-----------+----------+-----------+-------------------------+ 
| Username | Firstname | Lastname | Location |  DateandTime  | 
+----------+-----------+----------+-----------+-------------------------+ 
| ms  | mark  | smith | labs  | 2017-05-04 15:35:00.000 | 
| jb  | james  | brown | home  | 2017-05-04 18:55:00.000 | 
| cj  | charlie | jones | uni  | 2017-05-04 18:56:00.000 | 
| cj  | charlie | jones | home  | 2017-05-04 19:33:00.000 | 
| ms  | mark  | smith | shop  | 2017-05-05 15:40:00.000 | 
| jb  | james  | brown | somewhere | 2017-05-05 16:31:00.000 | 
| ms  | mark  | smith | work  | 2017-05-07 17:42:00.000 | 
| ms  | mark  | smith | market | 2017-05-07 17:45:00.000 | 
+----------+-----------+----------+-----------+-------------------------+ 

+----------+-----------+----------+-----------+-------------------------+ 
| Username | Firstname | Lastname | Location |  DateandTime  | 
+----------+-----------+----------+-----------+-------------------------+ 
| cj  | charlie | jones | home  | 2017-05-04 19:33:00.000 | 
| jb  | james  | brown | somewhere | 2017-05-05 16:31:00.000 | 
| ms  | mark  | smith | market | 2017-05-07 17:45:00.000 | 
+----------+-----------+----------+-----------+-------------------------+ 

回答

2

您可以使用窗口函數row_numbertop 1 with ties以獲得最新的每一行對應一個用戶名。

select top 1 with ties * 
from your_table 
order by row_number() over (
     partition by username order by dateandtime desc 
     ); 
2

這應該工作:

;with cte_a as 
(
    select distinct username, Firstname, Lastname from dbo.mytable 
) 
select a.username, a.Firstname, a.Lastname, q.[Location] [Last Location], q.DateAndTime 
from cte_a a 
outer apply 
(
    select top 1 b.[Location], b.DateAndTime 
    from dbo.myTable b 
    where b.Username = a.username 
    order by DateAndTime desc 
)q 
+1

通過@Gurwinder辛格其他答案是比我更好。 :) – GandRalph

+0

我不知道我認爲適用更有效率。 – xQbert

相關問題