【发布时间】:2012-02-14 05:12:51
【问题描述】:
我需要从旧数据库中读取用户以用于新系统中的统计信息,但我没有原始用户表。但是有一个统计表,其中包含每年的总和,我也可以在其中找到所有需要的用户信息。此外,这也只给我活跃的用户,这是我需要的。
该表有以下相关列:(此处不相关统计列)
- 用户 ID
- 名字
- 姓氏
- 电子邮件
- 年份
我希望 UserID 是不同的,因此它是我可以在 GROUP BY 中拥有的唯一列。 我将在 Year 上运行 MAX,以获取最近一年的值。 FirstName、LastName 和 Email 需要与 MAX(Year) 所在的行相同。换句话说,这些年来人们可能同时更改了姓名和电子邮件,我只想要最后一个,因为它是唯一相关的。
我对 SQL 查询的最佳建议如下:
SELECT UserID, Firstname, LastName, Email, MAX(Year) AS Year
FROM myTable
GROUP BY UserID
ORDER BY LastName, FirstName
唯一的问题是 SQL Server 2008 不允许我这样做,因为所有列要么必须使用 MAX 之类的函数,要么是 GROUP BY 的一部分。 FirstName、LastName 和 Email 列不能在 GROUP BY 下,因为这样会产生太多记录。似乎以某种方式将 MAX 放在所有这些上,但是我无法知道 MAX 函数实际在哪个列上工作。我不确定这是否会出现问题,但我没有时间查看 100 000 行来查看是否真的存在问题。
简而言之,我想要一整行的五列,其中 MAX 仅适用于一列,而 GROUP BY 则适用于另一列。有没有人有好的解决方案,或者在所有非分组行上使用 MAX 实际上安全吗?
【问题讨论】:
标签: sql sql-server-2008 group-by max greatest-n-per-group