Как вернуть несколько столбцов одной строки в T-SQL с помощью GROUP BY - PullRequest
2 голосов
/ 13 апреля 2011

У меня есть таблица транзакций, которая содержит следующие столбцы: 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

1 Ответ

8 голосов
/ 13 апреля 2011

В одну сторону

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...