2017-03-10 58 views
0

如何選擇大於指定日期(上次請求日期)的數據並排除created_at和deleted_at大於指定日期的數據?如果兩個日期不大於指定日期,則顯示SQL Query

例如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') 

但產量不會是我的預期。任何解決方案將不勝感激!謝謝

+0

您目前的邏輯沒有意義。你能包括一些樣本數據嗎?即使你得到了答案,你的問題也不會對任何人有幫助。 –

回答

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') 
+0

其實我想獲得不使用子查詢的查詢。但這會做!謝謝! – JimmyJS

+0

'NOT IN(SELECT ...)'通常執行_terribly_,但它通常可以變成'LEFT JOIN ... IS NULL'。 –

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秒,你可以對其進行編輯按要求。

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)