我有一个需要在 WebI 中重写的 Oracle 查询。我无法弄清楚如何模仿 Oracle 的“不存在”。如果我的查询在给定时间范围内有交易日期,则返回一个对象,但如果它在该时间范围之前有任何内容,则不会返回。也就是说,类似:
SELECT Object_Number
, Transaction_Date
, <other fields>
FROM Object_Table
INNER JOIN Transaction_Table ON Transaction_Table.Key = Object_Table.Key
WHERE Transaction_Table.Date BETWEEN '2017-07-01' AND '2017-01-31'
AND NOT EXISTS (SELECT 1 FROM Transaction_Table
WHERE Transaction_Table.Key = Object_table.Key
AND Transaction_Table.Date < '2017-07-01'
)
它有点复杂,但这是一个很好的近似值。
我以为我可以使用子查询过滤器,但我不知道如何将该子查询与原始 Object_Number 联系起来,或者如何模仿“不存在”。我不认为“NOT IN”与“NOT EXISTS”相同,因为宇宙中的记录复合体包括 transaction_date(它基本上是 Object_Table 和 Transaction_Table 的 JOIN),所以我要检查的是我当前记录中的日期(范围内的日期)不在范围之外。我确信这个过滤子查询可以做更多,但我不理解它。
我找不到任何复杂的过滤器示例(尽管许多声称是“复杂的”——它们有 3 个“AND”语句——噢噢噢!)。
我认为它可以通过宇宙中的一个新维度[使用 MIN(Transaction_Date)] 来完成,但我无法使用这条路径。
在我看来,如果没有这种类型的基本功能(至少它是 Oracle SQL 中的基本功能),这个 WebI 工具就会受到严重限制。