如何使用SQL查找第二高的竞价出价

时间:2011-05-10 05:54:01

标签: sql sql-server

我正在一个小型的在线拍卖网站上工作,我需要一些sql来确定每件商品的销售情况。 出价表包含以下字段: bidID,itemID,bidderID,bidAmount,bidDate

该网站的工作原理基本上与eBay相同,如果该项目目前为10美元,“投标人A”出价为50美元,则物品价格将保持10美元,直到第二个投标人提出更高的出价。假设“投标人B”出价40美元,那么该项目将是(40美元+增量)。取决于拍卖,增量是固定金额(比如5美元)或当前价格的百分比。

这是概述。至于sql,我认为我需要找到每个项目的最高和第二高出价,并使用它们来确定最终价格。

找到每件商品的第二高出价的最佳方式是什么?

另外,就像一张纸条,我使用的是SQL Server 2000,所以解决方案不能包含ROW_NUMBER()或其他更新的内置函数。

2 个答案:

答案 0 :(得分:7)

基本上,你可以做一个TOP 2,然后将它包装在一个SELECT语句中,只获得你想要的那个(较低的$ amount)。像这样:

SELECT TOP 1 *
FROM (
   SELECT TOP 2 *
   FROM table
   WHERE <criteria match>
   ORDER BY amount DESC
) AS newTable
ORDER BY amount ASC

答案 1 :(得分:0)

我不知道这是否是最有效的解决方案,但它可能有效:

SELECT TOP 2 * FROM bids WHERE itemID = ... ORDER BY bidAmount DESC