选择过去3个月的最长和最短日期

时间:2011-03-04 16:58:06

标签: mysql

在我的mysql表中,我有一个日期格式的列:yyyy-mm-dd

我提出此请求以选择过去2个月的最长和最短日期。

SELECT MIN(date) AS date1, MAX(date) AS date2 FROM mytable
    WHERE (MONTH(date) = (SELECT Month(MAX(date))-1 FROM mytable )
    OR MONTH(date) = (SELECT Month(MAX(date))-2 FROM mytable ))
    AND YEAR(date) = (SELECT YEAR(MAX(date))
    FROM mytable)

但是当我想选择最近3个月的日期时,我发现我不能让这个月的Jaunuar-1 以及请求:

OR MONTH(date) = (SELECT Month(MAX(date))-3 FROM mytable )

不起作用!

我的问题是:如何选择过去3个月(或过去3个月或4个月或5个月内的最长和最短日期)。

非常感谢。

3 个答案:

答案 0 :(得分:7)

SELECT MIN(`date`) AS date1,
       MAX(`date`) AS date2 
  FROM mytable
 WHERE `date` BETWEEN now() - interval 3 month 
                  AND now();

答案 1 :(得分:0)

看来你想要完整的三个月,也就是说,从今天到3月4日你需要从12月1日到现在,而不是从12月4日到现在。

以下查询应该这样做:

SELECT MIN(date), MAX(date) FROM mytable 
WHERE date <= DATE(NOW()) AND 
      date >= DATE_SUB(DATE_SUB(DATE(NOW()), 
                                INTERVAL DAY(NOW())-1 DAY), 
                       INTERVAL 3 MONTH)

同样,如果您希望此前3个月不包括本月,例如12月1日到2月28日你可以调整where子句:

WHERE date <= DATE_SUB(DATE(NOW()), INTERVAL DAY(NOW()) DAY) AND date >= ...

答案 2 :(得分:0)

SELECT MIN(date) AS date1, MAX(date) AS date2 
FROM mytable
WHERE date >= date_sub((select max(date) from mytable), month, 3)