我需要从旧数据库中读取用户信息用于新系统的统计,但我没有原始用户表。不过有一个包含每年总和的统计表,我可以在其中找到所有需要的用户信息。此外,这也只会给我活跃的用户,这正是我需要的。
该表具有以下相关列:(这里不涉及统计列)
- UserID - FirstName - LastName - Email - Year 我希望UserID是唯一的,所以它是唯一可以在GROUP BY中使用的列。 我将在Year上运行MAX,以获取最近一年的值。 FirstName,LastName和Email需要与MAX(Year)的行相同。换句话说,在这些年里可能有人改变了姓名和电子邮件,我只想要最后一个,因为这是唯一相关的。
我最好的SQL查询建议如下:
唯一的问题是SQL Server 2008不允许我这样做,因为所有列都必须使用像MAX这样的函数或者是GROUP BY的一部分。FirstName、LastName和Email列不能在GROUP BY下,因为那会产生太多记录。似乎将MAX应用于它们中的所有列可以解决问题,但是我无法知道MAX函数实际作用于哪一列。我不确定这是否会成为一个问题,但我没有时间查看100,000行以查看是否真的存在问题。
因此,简而言之,我希望在仅对一列进行MAX操作且另一列进行GROUP BY的情况下获取整行的五列数据。是否有好的解决方案,或者在非分组行上使用MAX是否安全?
该表具有以下相关列:(这里不涉及统计列)
- UserID - FirstName - LastName - Email - Year 我希望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是否安全?
GROUP BY UserID
。 - ypercubeᵀᴹ