2017-08-10 99 views
0

在SQL服務器2014年,我有一個表visits(id_visit, date, id_person)我找不出讓每個人的最後一次訪問的ID_在聚合函數的方式集團通過在聚合函數

真的不知道,如果它可以幫助,但這裏是那種想什麼,我有

select * 
from visits 
where id_visit in (select id_visit, max(date) from visits group by id_person) 

如果我有一個像瀏覽次數(id_visit,id_person,日期) 1,1「 2017年7月17日」 2,1 ,'2017-01-01' 3,2'2016-01-01' 4,2,'2015-01-01' 5,2,'2013-01-01' 我想它返回1,3,5

+0

添加一些示例表數據和預期的結果 - 作爲格式化文本。 – jarlh

回答

1

你可以使用ROW_NUMBER

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY id_person ORDER BY date DESC) AS rn 
    FROM visits 
) 
SELECT * 
FROM cte 
WHERE rn = 1; 

它將返回每人最後一次訪問。

+0

看起來像它的工作,你會如何介紹,如果我有一些和在我的主要條款在哪裏? –

+0

@BastienMorel在'rn = 1 AND'後只是他們和'...' – lad2025

-1

你需要更多的子查詢:

SELECT * 
    FROM visits 
WHERE id_visit IN (SELECT id_visit 
         FROM visits 
        WHERE date IN (SELECT max(date) 
             FROM visits 
            GROUP BY id_person)) 
+0

這就是我的想法,但我沒有成功地做到這一點,謝謝 –

+0

它做你想做的事嗎?然後可能標記爲awer; D – RealCheeseLord

+0

我還有一個問題,如果我有一個和b在同一日期訪問,然後b訪問稍後,它會告訴我兩個b的訪問,而我只希望第二個出現 –