首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SELECT TOP 1问题

SELECT TOP 1问题
EN

Stack Overflow用户
提问于 2011-07-05 00:18:52
回答 3查看 947关注 0票数 0

我使用的是C#、ASP.NET、SQL Server2008 R2。我的代码非常简单,但我总是遇到相同的错误。

我有一个包含OfferAmountStatus列的表Bids

Status为"Active“或"Red”。我想计算表中具有Status = 'Active'的行的平均OfferAmount,并将其与预设值进行比较。如果计算出的平均值OfferAmount低于预设值,我就会将当前Status = 'Active'和最低OfferAmount的行的Status设置为'Red‘。然后,我重新运行该过程。我使用了一个do/while循环,条件是calculated average > preset value.

除了一个条件之外,一切都运行得很完美。如果我有两个状态相等的OfferAmounts,并且我需要设置它们的Status = 'Red' (因此它们不再是我计算状态=‘Active’的一部分)。

在这种情况下,我的循环将一个OfferAmount设置为Status = 'Red',但随后会跳过另一个OfferAmount。通过跳过,我的意思是它的行为就像它不存在一样,并移动到下一个最高的OfferAmount。所以我只剩下一行,它的状态= 'Active‘。它继续运行,并将值上方和下方的其余行标记为“Red”,但再也不会返回到该行。

这是我使用的命令:

代码语言:javascript
代码运行次数:0
运行
复制
UPDATE Bids 
   SET Status = 'Red' 
 WHERE BidId IN (SELECT TOP 1 BidId 
                   FROM Bids 
                  WHERE Status = 'Active' 
                    AND ItemId = @ItemId 
               ORDER BY OfferAmount, BidDateAndTime DESC)

我尝试了一堆不同的sql命令,除了这一种情况外,所有的命令都有效。我开始认为这是一个配置问题。

EN

回答 3

Stack Overflow用户

发布于 2011-07-05 00:28:54

你可以根据最低出价金额进行比较,即

代码语言:javascript
代码运行次数:0
运行
复制
UPDATE Bids SET 
  Status = 'Red' 
WHERE Status = 'Active' AND 
      ItemId = @ItemId AND  
      OfferAmount = (SELECT MIN(OfferAmount) 
                     FROM Bids 
                     WHERE Status = 'Active' AND 
                           ItemId = @ItemId

我还没试过,但这个想法应该行得通。

票数 3
EN

Stack Overflow用户

发布于 2011-07-05 01:20:14

如果在TOP n之后添加WITH TIES,则可以根据ORDER BY子句中列的值获得与n-th行绑定的其他行(导致总行数超过n ):

代码语言:javascript
代码运行次数:0
运行
复制
UPDATE Bids 
SET Status = 'Red' 
WHERE BidId in 
      (SELECT TOP 1 WITH TIES BidId 
       FROM Bids 
       WHERE Status = 'Active' 
         AND ItemId = @ItemId 
       ORDER BY OfferAmount)
票数 1
EN

Stack Overflow用户

发布于 2011-07-05 10:34:53

谢谢你的帮助。我最终没有使用它,因为在我看到您的回复之前,我将它拆分为两个单独的sql命令。第一个使用我之前使用过的Select Top 1 Where语句检索行ID。然后,第二个命令将该行ID的状态设置为“Red”。

要么把它拆开就解决了它,要么我没有把它正确地组合成一个命令。

谢谢你的点子!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6573879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档