有个房间价格表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执行效率最高啊?总不能一天一天的获取累加吧,那样如果是在程序里执行累加的,读取数据库太频繁了,效率也是最低的。
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执行效率最高啊?总不能一天一天的获取累加吧,那样如果是在程序里执行累加的,读取数据库太频繁了,效率也是最低的。
还有上面说的最新记录那么就是取是当天的时间max(id)的记录吧
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')
====》
要想查询效率高,就要建好索引,减小查询的范围,避免全表扫描。
楼主这样的查询,可以在rootid与日期这两个字段上建立聚集索引,这样在查询的时候,通过where子句rootid=??与日期=?? 可以最快的定位到相关的记录,然后最执行加操作。我觉得这个问题的本质不是如何查询,而是如何建好索引。
使用select sum(price) from Tb
WHERE (startDate BETWEEN '2009-10-1' AND '2009-10-25') and roomid=1
WHERE (startDate BETWEEN '2009-10-1' AND '2009-10-25')