【问题标题】:Group by in an aggregate function在聚合函数中分组
【发布时间】:2017-08-10 09:38:57
【问题描述】:

在 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、日期) 1,1,'2017-07-17' 2,1,'2017-01-01' 3,2,'2016-01-01' 4,2,'2015-01-01' 5,2,'2013-01-01' 我希望它返回 1,3,5

【问题讨论】:

  • 添加一些示例表数据和预期结果 - 作为格式化文本。

标签: sql tsql sql-server-2014


【解决方案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;

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

【讨论】:

  • 看起来它的工作原理,如果我的 main where 中有一些和子句,你将如何介绍它?
  • @BastienMorel 在rn=1 AND ... 之后加了他们
【解决方案2】:

您需要更多子选择:

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

【讨论】:

  • 我就是这么想的,但我没有成功,谢谢
  • 它做你想做的事吗?然后可能标记为 anwer ;D
  • 我还有一个问题,如果我有 a 和 b 在同一日期访问,然后 b 稍后访问,它将显示 b 的访问,而我只希望出现第二个访问
猜你喜欢
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 2010-09-08
  • 1970-01-01
相关资源
最近更新 更多