我有一个包含以下列的表:
我正在尝试编写一个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,但不会将结果限制为过去三个月。如何修改此声明以仅从过去三个月中选择数据?
答案 0 :(得分:10)
您的日期常量格式错误。如果您使用的是固定日期,请尝试此操作:
... AND `lastSubDate` > '20130224'
您也可以使用上面的20130224
(不带引号)或'2013-02-24'
- 请参阅MySQL Date and Time Literals documentation。
或计算“三个月前”只需这样做:
... AND `lastSubDate` > CURDATE() - INTERVAL 3 MONTH
最后,你不需要这里的反引号。如果你发现它们分散了注意力,你可以放弃它们:
... AND lastSubDate > whatever