有个房间价格表RP:
id   roomid  price    startDate    endDate        inputDate
1     1       1000     2009-10-1    2009-10-11     2009-10-1
2     1       800     2009-10-10    2009-10-20     2009-10-5某天的价格可能有多个,以最新录入的为准。没有记录的记price为0。获取roodid=1的房间从2009-10-1到2009-10-25的price总和,该怎么写sql执行效率最高啊?总不能一天一天的获取累加吧,那样如果是在程序里执行累加的,读取数据库太频繁了,效率也是最低的。

解决方案 »

  1.   

    存储过程游标去取就行了,遍历起来还是挺快的
    还有上面说的最新记录那么就是取是当天的时间max(id)的记录吧
      

  2.   

    “获取roodid=1的房间从2009-10-1到2009-10-25的price总和”这个要求是必须时刻体现、即时刷新的吗?
      

  3.   


    id  roomid  price    startDate    endDate        inputDate
    1    1      1000    2009-10-1    2009-10-11    2009-10-1
    2    1      800    2009-10-10    2009-10-20    2009-10-5某天的价格可能有多个,以最新录入的为准。没有记录的记price为0。获取roodid=1的房间从2009-10-1到2009-10-25的price总和,该怎么写sql执行效率最高啊?总不能一天一天的获取累加吧,那样如果是在程序里执行累加的,读取数据库太频繁了,效率也是最低的。select sum (price) as totle from YourTable 
    WHERE (startDate BETWEEN '2009-10-1' AND '2009-10-25')
      

  4.   

    暂时SUM了,用存储也就是这个思路。等高人回答。
      

  5.   

    获取roodid=1的房间从2009-10-1到2009-10-25的price总和,该怎么写sql执行效率最高啊?
    ====》
    要想查询效率高,就要建好索引,减小查询的范围,避免全表扫描。
    楼主这样的查询,可以在rootid与日期这两个字段上建立聚集索引,这样在查询的时候,通过where子句rootid=??与日期=?? 可以最快的定位到相关的记录,然后最执行加操作。我觉得这个问题的本质不是如何查询,而是如何建好索引。
      

  6.   

    建ID为索引
    使用select sum(price) from Tb
    WHERE (startDate BETWEEN '2009-10-1' AND '2009-10-25') and roomid=1
      

  7.   

    select sum (price) as totle from YourTable 
    WHERE (startDate BETWEEN '2009-10-1' AND '2009-10-25')