как мне получить 2 самые последние записи - PullRequest
0 голосов
/ 05 июня 2010

У меня есть таблица, похожая на пример, показанный ниже.Я хотел бы иметь возможность выбрать две самые последние записи для каждой учетной записи.Я использую Microsoft SQL 2000. Спасибо за любую помощь, которую вы можете предоставить.

AccountNo,  DateOfOrder,    OrderID
-----------------------------------------
 123,        March 1 2010,     1
 222,        March 3 2010,     2
 123,        April 1 2010,     3
 345,        March 15 2010,   77
 123,        june 1 2010,     55
 123,        march 5 2010,    33
 345,        march 1 2010,    99
 222,        june 1 2010,     7
 222,        june 2 2010,  22

Ответы [ 4 ]

3 голосов
/ 05 июня 2010

Для SQL 2000 это будет работать

SELECT  a1.AccountNo,  a1.DateOfOrder,  a1.OrderID
FROM Accounts a1
LEFT OUTER JOIN Accounts a2
  ON a2.AccountNo = a1.AccountNo AND a1.DateOfOrder < a2.DateOfOrder
GROUP BY a1.AccountNo,  a1.DateOfOrder,  a1.OrderID
HAVING COUNT(*) < 2
1 голос
/ 05 июня 2010

выберите самый последний набор, и выберите набор с максимальной датой, которая меньше, чем самый последний набор.

0 голосов
/ 05 июня 2010

Если вы хотите отсортировать поле DateOfOrder, то SELECT TOP 2 * from table .. ORDER BY DateOfOrder

Если нет, я думаю, что лучшим решением было бы добавить поле InsertDate в таблицу.

У вас может быть триггер, автоматически обновляющий это поле после вставки с текущей датой и временем.

Тогда просто SELECT TOP 2 * from table .. ORDER BY InsertDate

0 голосов
/ 05 июня 2010

как насчет чего-то вроде:

select * from Account a
where OrderID in
  (select top 2 OrderID from Account
   where AccountNo = a.AccountNo
   order by DateOfOrder desc)
...