查询以返回除第一条记录之外的所有结果

时间:2016-02-03 21:05:51

标签: sql sql-server

我有一个存档表,其中包含每个locationID的事务记录。

此表中的位置将包含0行,1行或多行。

我需要一个SELECT查询,它将为任何超过1行的位置返回行,并跳过第一个条目。

e.g。

交易表

0.0

因此,鉴于上述情况,由于locationID有多行,我将返回除第一行(最低的transacton_id)之外的所有行:

transactionId  locationId  amount
1              11          2343
2              11          23434
3              25          342
4              32          234
5              77          234
6              11          38938
7              43          234
8              43          1235

2 个答案:

答案 0 :(得分:3)

您可以使用row_number执行此操作。这假设没有重复的transactionid。

select transactionid,locationid,amount
from
(select t.*, row_number() over(partition by locationid order by transactionid) as rn
from transactions t) t
where rn > 1

答案 1 :(得分:1)

另一个答案很好。您也可以这样写它,它可能会让您对分组实践有所了解:

SELECT Transactions.TransactionID, Transactions.locationID, Transactions.amount
FROM Transactions  INNER JOIN
(SELECT     locationID, MIN(TransactionID) AS MinTransaction,
    COUNT(TransactionID) AS CountTransaction
FROM         Transactions 
GROUP BY locationID) TableSum ON Transactions.locationID = TableSum.locationID
WHERE (Transactions.TransactionID <> TableSum.MinTransaction) AND
     (TableSum.CountTransaction > 1)