我有一个包含以下列的表:
ID=按升序排列的唯一标识符
ProductId=产品的Id
rate1到rate5=产品获得1星的次数,2
星级、三星级、四星级或五星级
aveRate=该产品的平均评级
lastSubDate=上次提交该产品的评论的时间
我正试图编写一个SQL语句来选择ProductId,它拥有最高数量的5星评级,平均评级为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,但它没有限制的结果,以过去三个月,我想。我怎样才能修改这项声明,以便只从过去三个月中选择数据?

最佳答案

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

... AND `lastSubDate` > '20130224'

您也可以使用上面的20130224(不带引号)或'2013-02-24'-请参见MySQL Date and Time Literals documentation
或者要计算“三个月前”,只需这样做:
... AND `lastSubDate` > CURDATE() - INTERVAL 3 MONTH

最后,这里不需要反拍。如果你发现它们让你分心,你可以放下它们:
... AND lastSubDate > whatever

09-06 14:19