如何使用查询获取上个月?

时间:2014-01-22 13:41:49

标签: mysql sql

我在查询的最后一个月遇到问题: 这是我的问题:

SELECT 
  i_chelt_pub_val.`agent_id`,
  i_chelt_pub_val.`date`,
  i_chelt_pub_val.`form_val` 
FROM
  i_chelt_pub_val 
WHERE (
    MONTH(i_chelt_pub_val.`date`) = (MONTH(CURRENT_TIMESTAMP) - 1)
  ) 
  AND i_chelt_pub_val.`agent_id` = '253'

它在2013年运作良好,现在在2014年我遇到了一个问题,因为这行查询MONTH(i_chelt_pub_val.date) = (MONTH(CURRENT_TIMESTAMP) - 1)会让我12 = 1-1,这不好。我想在where子句中为12 = 12.我该怎么做?

3 个答案:

答案 0 :(得分:2)

尝试DATE_SUB():

... = MONTH(DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 MONTH));

答案 1 :(得分:2)

假设您想要从上个月开始到上个月末的所有数据,您的查询有三个问题:

  • 您将获得所有年份的所有januaries
  • 取决于您执行查询的时间,您将错过从一个月初到执行时的数据,例如执行日期为2014-01-22 15:03:00,然后您将从{{{{}}获取数据1}}直到今天,但不是来自2013-12-22 15:03:00
  • 它可能会很慢,因为你的日期列上没有使用索引,因为你在它上面使用索引

要解决此问题,请按以下方式查询:

2013-12-01 00:00:00

答案 2 :(得分:0)

SELECT 
  i_chelt_pub_val.`agent_id`,
  i_chelt_pub_val.`date`,
  i_chelt_pub_val.`form_val` 
FROM
  i_chelt_pub_val 
WHERE (
    (
    MONTH(i_chelt_pub_val.`date`) = (MONTH(CURRENT_TIMESTAMP) - 1) 
      AND 
    YEAR(i_chelt_pub_val.`date`) = (YEAR(CURRENT_TIMESTAMP))
    ) 
    OR 
   (MONTH(i_chelt_pub_val.`date`) = 12 
      AND
    MONTH(CURRENT_TIMESTAMP)=1 
      AND 
    YEAR(i_chelt_pub_val.`date`) = (YEAR(CURRENT_TIMESTAMP)-1))
    )
    AND i_chelt_pub_val.`agent_id` = '253'