选择timestampdiff超过1天的位置,并且有一些空值

时间:2012-05-15 15:12:44

标签: mysql

我有一个包含id_userto_sentsent_datetime列的表格,可以是有效的DATETIMENULL。它基本上存储了是否发送了什么。

我每24小时只能发送5个,所以在该查询中我需要知道哪个id_user to_sent = 1 并且在过去24小时内没有发送任何内容。 to_sent = 1也可能有 sent_datetime = NULL ,但我不知道如何处理它。

发送将在稍后,只有不同的id_user才可以。

我试过

SELECT id_user
FROM send
WHERE
    to_sent=1
    AND (TIMESTAMPDIFF(DAY, sent_datetime, NOW()) < 1)
GROUP BY id_user
ORDER BY updated_datetime;

但我不会只得到那些距离上次发送内容超过24小时的人。

1 个答案:

答案 0 :(得分:2)

有两件事需要检查:

  1. 确保处理sent_datetime为空的情况,否则TIMESTAMPDIFF将返回NULL。我不确定这是一个问题。

  2. 确保TIMESTAMPDIFF返回的值不是负数。如果是,请在表达式中反转NOW()sent_datetime

  3. 尝试在select语句中添加此表达式,以便您可以看到结果。

  4. 所以,你可以试试这个:

    SELECT id_user, TIMESTAMPDIFF(DAY, sent_datetime, NOW())
    FROM send
    WHERE
        to_sent=1
        AND (TIMESTAMPDIFF(DAY, sent_datetime, NOW()) < 1)
        AND sent_datetime IS NOT NULL
    GROUP BY id_user
    ORDER BY updated_datetime;
    

    最后,你需要这个:

    SELECT id_user
    FROM send
    WHERE
        to_sent=1
        AND (TIMESTAMPDIFF(DAY, sent_datetime, NOW()) >= 1
             OR sent_datetime IS NULL)
    GROUP BY id_user
    ORDER BY updated_datetime;
    

    另外,这使得差异的准确性达到一天。您可能希望将其更改为:TIMESTAMPDIFF(HOUR, sent_datetime, NOW()) >= 24或分钟,或其他任何内容。如果您想要完全24小时而不是日历中的一天。