我有一个包含以下列的表:
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