【问题标题】:Get records where timestamp column is from 2 months ago but not from 1 month ago获取时间戳列来自 2 个月前但不是 1 个月前的记录
【发布时间】:2020-07-26 21:36:08
【问题描述】:

我正在尝试查询一个 MySQL 数据库,其中名为 CrashReceived 的时间戳列来自两个月前,但不包括 1 个月前的记录。

这个想法是我有一个计数比较,所以我可以得到上个月的记录计数,然后将计数与上个月进行比较。

因此,我正在测试一个查询以检索列值来自 2 个月前但不包括 1 个月前的记录的所有记录。

以下是我目前的查询:

SELECT * FROM crash_info WHERE ProjectID='14720069' AND (NOW() - INTERVAL 2 MONTH < CrashReceived AND (CrashReceived <> NOW() - INTERVAL 1 MONTH));

但这是返回包含今天和昨天的记录,所以不要做我所追求的。

【问题讨论】:

  • @Strawberry 他提供了一个 SQL 语句,该语句足够简单,可以理解和重现问题。您是否因此而投反对票?

标签: mysql


【解决方案1】:

您可以为此使用 between 运算符:

SELECT * FROM crash_info 
WHERE ProjectID='14720069' AND 
CrashReceived BETWEEN (NOW() - INTERVAL 2 MONTH) AND (NOW() - INTERVAL 1 MONTH));

【讨论】:

    【解决方案2】:

    字段必须大于时间 - 2 个月,但小于时间 - 1 个月。

    CrashReceived > (DATE_SUB(NOW(), INTERVAL 2 MONTH)
    AND CrashReceived <= (DATE_SUB(NOW(), INTERVAL 1 MONTH)
    

    您应该将索引应用于字段CrashReceived

    【讨论】:

    • 谢谢,这就是诀窍,总是因为某种原因在处理这些事情上挣扎。感谢您对索引的建议,绝对需要它但想到了:)
    • @Boardy 没问题!您还应该尝试 Ankit 的答案,如果您喜欢投票,使用 BETWEEN 可以简化greathan&smaller than things。
    猜你喜欢
    • 2014-07-25
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 2013-11-06
    • 2012-12-26
    相关资源
    最近更新 更多