【问题标题】:mysql query - show last month's data unix timestampmysql 查询 - 显示上个月的数据 unix 时间戳
【发布时间】:2015-11-30 11:37:24
【问题描述】:

我已经进行了这个查询,它可以正确显示从当前日期开始一个月的数据。例如这个查询:

SELECT * 
  FROM test 
 WHERE price >=100 
  AND active = 1 
  AND dateadded >= UNIX_TIMESTAMP(DATE_SUB( CURDATE(), INTERVAL 1 MONTH)) 
ORDER BY testvalue DESC

此查询输出从即 10 月 30 日到当前日期 11 月 30 日的日期时间戳。我已经编辑了查询和外卖CURDATE,但它在这一点上失败了。

问题是我将如何更改此查询以仅显示最后几个月,即如果月份是 11 月,则显示 10 月的数据。

【问题讨论】:

    标签: mysql unix-timestamp


    【解决方案1】:

    您必须获取上个月的第一天与上个月的最后一天之间的范围,您可以通过格式化日期并将日期部分设置为01 来获得。有一个function。在手册的同一页上,您还可以找到有关 DATE_FORMAT() 的信息。

    SELECT * 
      FROM test 
     WHERE price >=100 
      AND active = 1 
      AND dateadded BETWEEN 
        UNIX_TIMESTAMP(DATE_FORMAT(DATE_SUB( CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01')) 
        AND UNIX_TIMESTAMP(CONCAT(LAST_DAY(DATE_SUB( CURDATE(), INTERVAL 1 MONTH), ' 23:59:59'))
    ORDER BY testvalue DESC
    

    【讨论】:

    • 这是一个很好的策略,但它会从该月的最后一天截断结果,因为它介于该月的第一天和该月的最后一天的开始之间。第二部分应该是 AND UNIX_TIMESTAMP(DATE_FORMAT(DATE_SUB( CURDATE(), INTERVAL 0 MONTH), '%Y-%m-01'))
    • 感谢您发现此错误,但恐怕您的错误也不是 100% 正确。由于BETWEEN 包含在内,因此您实际上必须结束前一天。我固定了我的答案。而当你减去 0 个月时,你还不如根本不减去任何东西。但再次感谢您注意到并通知我。
    • 所以我的更新会显示下个月第一秒的订单。好的,很好的更新,谢谢。
    • 你有一个新的错字。 UNIX_TIMESTAMP(CONCAT(LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '23:59:59')) 应该是 UNIX_TIMESTAMP(CONCAT(LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)), ' 23:59 :59')),你缺少右括号。
    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多