我有一个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