Myślę, że to jest to, czego szukasz:chcesz wszystkie wiersze z numerem wiersza, który nie jest maksymalną datą aktywacji
DECLARE @tbl TABLE
(
CustomerName VARCHAR(20),
ProductName VARCHAR(20),
KeyCode INT,
ActivationDate DATETIME
)
INSERT INTO @tbl
SELECT 'cmp1', 'game', 28734, GETDATE() -1 UNION ALL
SELECT 'cmp1', 'game', 28734, GETDATE() -1.5 UNION ALL
SELECT 'cmp1', 'game', 28734, GETDATE() -1.2 UNION ALL
SELECT 'cmp1', 'game', 28734, GETDATE() -1.8 UNION ALL
SELECT 'cmp1', 'game', 28734, GETDATE() UNION ALL
SELECT 'cmp1', 'game', 28734, GETDATE() -17 UNION ALL
SELECT 'cmp2', 'game', 28736, GETDATE() -1 UNION ALL
SELECT 'cmp2', 'game', 28736, GETDATE() -1.5 UNION ALL
SELECT 'cmp2', 'game', 28736, GETDATE() -1.2 UNION ALL
SELECT 'cmp2', 'game', 28736, GETDATE() -1.8 UNION ALL
SELECT 'cmp2', 'game', 28736, GETDATE() UNION ALL
SELECT 'cmp2', 'game', 28736, GETDATE() -17
SELECT ROW_NUMBER() OVER(ORDER BY ActivationDate DESC) RowNumber,
CustomerName,
ProductName,
KeyCode,
ActivationDate
FROM @tbl workTable
WHERE ActivationDate !=
(
SELECT MAX(ActivationDate)
FROM @tbl checkTable
WHERE workTable.CustomerName = checkTable.CustomerName
AND workTable.ProductName = checkTable.ProductName
AND workTable.KeyCode = checkTable.KeyCode
)
RowNumber CustomerName ProductName KeyCode ActivationDate
1 cmp1 game 28734 2011-02-24 08:40:45.790
2 cmp2 game 28736 2011-02-24 08:40:45.790
3 cmp2 game 28736 2011-02-24 03:52:45.793
4 cmp1 game 28734 2011-02-24 03:52:45.793
5 cmp1 game 28734 2011-02-23 20:40:45.790
6 cmp2 game 28736 2011-02-23 20:40:45.790
7 cmp2 game 28736 2011-02-23 13:28:45.790
8 cmp1 game 28734 2011-02-23 13:28:45.790
9 cmp1 game 28734 2011-02-08 08:40:45.790
10 cmp2 game 28736 2011-02-08 08:40:45.790
Jeśli chcesz więcej niż jednego...
SELECT ROW_NUMBER() OVER(ORDER BY ActivationDate DESC) RowNumber,
CustomerName,
ProductName,
KeyCode,
ActivationDate
FROM @tbl workTable
WHERE NOT ActivationDate IN
(
SELECT TOP 2 ActivationDate
FROM @tbl checkTable
WHERE workTable.CustomerName = checkTable.CustomerName
AND workTable.ProductName = checkTable.ProductName
AND workTable.KeyCode = checkTable.KeyCode
ORDER BY ActivationDate DESC
)