如何使用GROUP BY返回T-SQL中同一行的多个列

Jef*_*ock 2 sql t-sql sql-server

我有一个Transactions表,其中包含以下列:MemberID,TransactionID,Date,MethodOfPayment,+更多列

主键由MemberID和TransactionID组成.我需要一个查询,通过MemberID将这些行分组为最新日期.这很容易,但另外我需要最新日期的其余列,例如MethodOfPayment.我正在寻找最简单的方法来实现这一目标.

我知道这是我可以做到的一种方式,但如果我必须为每个列包含一个子查询,那么查询会变得非常长.我的直觉告诉我必须有一个更好的方法.

SELECT
   MemberID,
   MAX(Date) AS Date,
   (
      SELECT TOP(1) MethodOfPayment
      FROM Transactions
      WHERE MemberID = t.MemberID
      ORDER BY Date DESC
   ) AS MethodOfPayment
FROM Transactions t
GROUP BY MemberID
Run Code Online (Sandbox Code Playgroud)

SQL*_*ace 8

单程

SELECT t1.* 
FROM(
SELECT
   MemberID,
   MAX(Date) AS MaxDate
   FROM Transactions 
GROUP BY MemberID) t2 
JOIN Transactions t1 ON t2.MaxDate = t1.Date
AND t2.MemberID = t1.MemberID
Run Code Online (Sandbox Code Playgroud)

如果您使用SQL Server 2005或更高版本,则另一种方法

;WITH  cte AS(SELECT *,
 ROW_NUMBER() OVER(PARTITION BY MemberID ORDER BY date DESC) AS ROW
 FROM Transactions)

SELECT * FROM cte
where row = 1
Run Code Online (Sandbox Code Playgroud)