【问题标题】:Using MySQL to select data from the last three months使用 MySQL 选择最近三个月的数据
【发布时间】:2013-05-24 19:47:16
【问题描述】:

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

  • ID = 按升序排列的唯一标识符
  • ProductId = 产品 ID
  • rate1 到 rate5 = 产品获得 1 星的次数,2 星级、3 星、4 星或 5 星评级
  • aveRate = 该产品的平均评分
  • lastSubDate = 上次为该产品提交评论的时间

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

表格如下例所示:

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,但它并不会像我想要的那样将结果限制在最近三个月。如何修改此语句以仅选择过去三个月的数据?

【问题讨论】:

  • 最后一个问题是关于如何合并两个表中的数据。这个问题得到了很好的回答,我现在有了一个包含所有这些数据的新表。这个问题是关于使用这个新的时间戳对此运行一个选择查询。
  • 是的,这不应该被关闭。这是一个不同的问题。

标签: mysql sql timestamp


【解决方案1】:

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

... AND `lastSubDate` > '20130224'

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

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

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

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

... AND lastSubDate > whatever

【讨论】:

  • 感谢这个 CURDATE() - INTERVAL 3 MONTH 真的很有用,因为它可以让我在 php 中解决这个问题。
  • 感谢@CadeRoux - 又一个我一无所知的 MySQL 块 :) 我在这里看到的大多数示例都是我上面发布的格式,所以我把它们当作福音。我很乐意切换到较短且设置中性的值。
  • @CadeRoux 该博客是关于 SQL-Server 的。 MySQL 的设置没有相同的问题,并以相同的方式接受 '21030224''2103-02-24' (AFAIK):MySQL Date and time literals
  • 感谢@ypercube 澄清这一点。在使用了多年的 Oracle 和一些 SQL Server 之后,我是 MySQL 的新手,所以我真的需要对它的一些更好的点进行系统研究,而不是边走边学。同时,像您和 Cade Roux 这样的指针是金子,所以感谢你们俩!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多