使用MySQL选择过去三个月的数据

时间:2013-05-24 19:47:17

标签: mysql sql timestamp

我有一个包含以下列的表:

  • ID =升序中的唯一标识符
  • ProductId =产品的ID
  • rate1 to rate5 =产品获得1星的次数,2 明星,3星,4星或5星评级
  • aveRate =该产品的平均评级
  • lastSubDate =上次为该产品提交评论

我正在尝试编写一个SQL语句,选择具有最高5星评级的ProductId,平均评分为5,最后一次评审是在过去三个月内。

该表如下例所示:

ID  ProductId   rate1   rate2   rate3   rate4   rate5   aveRate     lastSubDate
18  9996637     0   0   0   0   1   5   2011-08-10 12:00:34
26  9996628     1   0   0   0   0   1   2010-05-06 05:45:05
34  9996618     0   0   0   1   0   4   2011-10-09 09:00:45
36  9996614     5   0   0   0   0   1   2011-01-05 09:30:32
48  9996592     5   0   1   0   3   3   2012-11-28 19:00:06
66  9996566     0   0   0   1   3   5   2011-04-06 06:45:34
70  9996562     0   0   0   1   1   5   2011-05-17 18:30:03

这是我到目前为止的查询:

SELECT `ProductId`,`rate5`,`aveRate`,`lastSubDate` 
FROM ratings 
WHERE `aveRate` = 5 AND `lastSubDate` > '24 Feb 2013' 
ORDER BY `rate5` DESC 
LIMIT 3

这将返回最多5星评价的产品,其平均评分为5,但不会将结果限制为过去三个月。如何修改此声明以仅从过去三个月中选择数据?

1 个答案:

答案 0 :(得分:10)

您的日期常量格式错误。如果您使用的是固定日期,请尝试此操作:

... AND `lastSubDate` > '20130224'

您也可以使用上面的20130224(不带引号)或'2013-02-24' - 请参阅MySQL Date and Time Literals documentation

或计算“三个月前”只需这样做:

... AND `lastSubDate` > CURDATE() - INTERVAL 3 MONTH

最后,你不需要这里的反引号。如果你发现它们分散了注意力,你可以放弃它们:

... AND lastSubDate > whatever