我有一个包含以下列的Transactions表: 会员ID, TransactionID的, 日期, 付款方式, +更多列
主键由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
答案 0 :(得分: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
另一种方法,如果您使用的是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