我有一個select語句,並且只有當其中至少有一個與今天有60天不同的日期時才返回所有值。 問題是我有一個外部應用程序,它返回我想要比較的列,它們來自不同的表(一個屬於現金項目,另一個屬於卡項目)。
考慮到我有以下幾點:僅當至少有一行匹配時才選擇條件
OUTER APPLY (
SELECT COUNT(*) AS quantity, MIN(date) AS item_date
FROM dbo.get_cash_items(loans.id_cash) AS cash_item
HAVING loans.id_product_type = 1 --Cash
UNION
SELECT COUNT(*) AS quantity, MIN(date) AS item_date
FROM dbo.get_card_items(loans.id_card) AS card_item
HAVING loans.id_product_type = 2 --Card
) AS items
我想返回所有的行,只有當DATEDIFF(DAY, MIN(items.item_date), GETDATE()) >= 60
,但我想他們都哪怕只有一個匹配這個條件。
這樣做的最佳方法是什麼?
編輯
使其更清晰,我將解釋使用案例:
我需要顯示每一筆貸款的項目,只有當客戶端是在到期日上的60多天晚任何它
你確定要使用'UNION'而不是'UNION ALL'嗎? – Kermit
這也是一樣的,我會根據loans.id_product_type獲取物品,它總是會是一個或另一個(沒有聯盟真的發生)。 –
我明白了。 ** ** **強烈建議您始終使用'UNION ALL',除非您需要刪除重複項。由於引擎跳過檢查重複項的額外步驟,因此速度要快得多。 – Kermit