我有一个存档表,其中包含每个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
答案 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)