0

如果 created_at 和 deleted_at 都大于指定日期,我如何选择大于指定日期(上次请求日期)的数据并排除?

例如 last_requested_date 是 '2017-03-09 15:41:00'。然后,我想显示在“2017-03-09 15:41:00”之后创建/更新/删除的国家/地区。但我不想显示在 last_requested_date 之后创建并删除的国家(例如 created_at '2017-03-09 15:41:01' 和 deleted_at '2017-03-09 15:41:02')

我的代码是这样的:

SELECT * FROM countries
WHERE (created_at > '2017-03-09 15:41:00' OR
      updated_at > '2017-03-09 15:41:00' OR
      deleted_at > '2017-03-09 15:41:00') AND
      NOT (created_at > '2017-03-09 15:41:00' AND deleted_at > '2017-03-09 15:41:00')

但输出不是我预期的。任何解决方案将不胜感激!谢谢

4

3 回答 3

0

检查这个。

        SELECT * FROM countries
        WHERE (created_at > '2017-03-09 15:41:00' OR
              updated_at > '2017-03-09 15:41:00' OR
              deleted_at > '2017-03-09 15:41:00') AND

        datediff(SECOND,created_at, deleted_at) > 60

这里我们检查两个日期(created_at和deleted_at)之间的差异必须大于60秒,您可以根据需要进行编辑。

于 2017-03-10T05:33:03.107 回答
0

如果我理解您的要求正确,那么您的查询非常接近产生期望的结果。您可能需要再添加一个条件来检查创建日期和删除日期之间的日期差异,以避免今天自行创建和删除的国家/地区。

SELECT * 
FROM countries
WHERE (created_at > '2017-03-09 15:41:00' OR
       updated_at > '2017-03-09 15:41:00' OR
       deleted_at > '2017-03-09 15:41:00'
      ) AND (created_at > '2017-03-09 15:41:00' AND 
             deleted_at > '2017-03-09 15:41:00' AND 
             DATEDIFF(created_at,deleted_at) > 0)
于 2017-03-10T05:44:11.773 回答
0
 SELECT * FROM countries
 WHERE (created_at > '2017-03-09 15:41:00' OR
  updated_at > '2017-03-09 15:41:00' OR
  deleted_at > '2017-03-09 15:41:00') AND id NOT IN
  (SELECT id FROM countries where created_at > '2017-03-09 15:41:00' AND deleted_at > '2017-03-09 15:41:00')
于 2017-03-10T05:32:37.357 回答