MySQL查询量的价格按产品ID变化

时间:2013-11-21 18:42:02

标签: mysql sql join

我有一张桌子。每当客户更新他们的产品时,它都会存储价格。通过这种方式,我可以监控所做的价格变化,如果你愿意,可以监控历史。

表结构是

ID (Primary Key)

Date (DateTime)

Price (Decimal)

Product_ID (INT) - Foreign Key

我想查找每个产品的两个日期之间价格变化的总次数,然后将总数加起来。

例如我可以在主页上说“我们已经改变了X产品的价格2013年12月10日 - 2013年12月20日”

3 个答案:

答案 0 :(得分:0)

通过查询可以很容易地处理一个简单的组。

select count(*), product_id from table where date>='' and date<'' group by product_id

这将为您提供产品ID和该时间段内的更改次数。

答案 1 :(得分:0)

SELECT SUM(priceChanges) 
FROM (SELECT count(*) as priceChanges 
      FROM Table 
      WHERE DATE BETWEEN start AND end
      GROUP BY product_id
     )
UNION
SELECT count(*), product_id 
FROM Table 
WHERE DATE BETWEEN start AND end
GROUP BY product_id

第一行是整个总和,其余的是每个product_id的价格变化数。

我不喜欢这样的结果集,因为它需要应用程序端的逻辑来解析结果集。但是,如果您不想将其拆分并发出2个查询,则无论如何都需要应用程序逻辑。

你可以做的另一件事是只发出底部的select语句,并在处理结果集时计算所有计数的总和。

如果查询速度很慢,您可能需要考虑在日期列上创建索引。

答案 2 :(得分:0)

尝试这个。

SELECT COUNT(*) AS total,
       product_id
FROM table
WHERE date BETWEEN 'fromDate' AND 'toDate'
GROUP BY product_id