计算产品的唯一出价

时间:2009-10-22 14:58:46

标签: sql sql-server-2005

产品(productId INT PK,bidCount INT)

出价(bidID INT PK,productId INT,userId INT,isCounted BIT,DATETIME创建)

产品与出价之间存在1:多关系。

每个投标周期持续1天,因此我需要每天跟踪唯一出价并更新bidCount列。我为批处理过程中处理的每一行设置了isCounted = 1。

因此,这是一整天产品的独特出价总计。

我有一个每5分钟运行一次的sql作业来更新bidCount。

我认为此查询需要的步骤:

  1. 抓取所有包含isCounted = 1
  2. 的行
  3. query#1构建productID和uniqueBidCounts列表,其中isCounted = 1 query#2构建productID列表和uniqueBidCounts,其中isCounted = 0 query#3构建productID列表和uniqueBidCounts,区别为#1和#2
  4. 通过使用query#3
  5. 将uniqueBidCounts添加到bidCount列来更新products表
  6. 为查询#2
  7. 中的列表设置isCounted = 1

    这是正确的做法吗?这是一个复杂的方法还是可以简化?

    更新的 我添加了创建的DATETIMe字段,因此我必须对当天进行过滤,并删除每天(或在同一过程中)运行的另一个批处理作业中的任何旧出价

2 个答案:

答案 0 :(得分:0)

为什么不使用触发器?如果我理解你的问题,你可以将触发器插入Bids表。在此触发器中,您将在相应的products行表中增加bidCount。而且您还可以制定一个将在午夜运行的计划,并将bidCount设置为0。

答案 1 :(得分:0)

我认为isCounted对你来说是错误的方向。您必须查询当天的所有出价并按userId进行分组,并对行进行计数并将该数字插入到bidCount中。

  

所以这是一个独特的运行总计   全天投标产品。

你不可能真正拥有独特的唯一身份,因为每次跑步都必须重新独特。因此,无论它是否已被计算都是无关紧要的。