1

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

  • ID = 升序的唯一标识符
  • ProductId = 产品 ID
  • rate1 到 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,但它不会将结果限制为我想要的最后三个月。如何修改此声明以仅选择过去三个月的数据?

4

1 回答 1

10

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

... AND `lastSubDate` > '20130224'

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

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

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

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

... AND lastSubDate > whatever
于 2013-05-24T19:51:37.680 回答