按聚合函数分组

时间:2017-08-10 09:38:57

标签: sql tsql sql-server-2014

在SQL Server 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,date) 1,1, '2017年7月17日' 2,1, '2017年1月1日' 3,2, '2016年1月1日' 4,2, '2015年1月1日' 5,2, '2013-01-01' 我希望它返回1,3,5

2 个答案:

答案 0 :(得分: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;

它将返回每人最后一次访问。

答案 1 :(得分:-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))