将数字 1 存储在定义为的字段中是否符合 SQL92 NUMERIC 3,3
?
关于什么 DECIMAL 3,3
?
这是否意味着精度是浮动小数位或静态的,即使它们都为零也必须有 3 个小数位?
在以下查询中,我必须为每个客户计算交易。但是,我必须从结果集中完全排除交易时间超过一年的客户。
查询优化器不应该足够聪明,只为每个客户评估一次存在吗?
--Count transactions on customers that are less than 1 year old
SELECT t1.CUSTID, COUNT(*)
FROM CUST_TRX t1
WHERE NOT EXISTS (
SELECT FIRST 1 1
FROM CUST_TRX t2
WHERE
t2.CUSTID = t1.CUSTID AND
t2.DATED < CURRENT_DATE - 365
GROUP BY t2.CUSTID
)
GROUP BY t1.CUSTID
Run Code Online (Sandbox Code Playgroud)
我的查询计划中没有自然。此查询的执行就像数据库为每个事务运行存在子句,而不是为每个客户运行它。如果我删除GROUP BY
子查询中的,则性能相同。
有没有更好的方法来做到这一点,以便我可以从数据库中获得更好的性能?SELECT
如果可能的话,希望一个简单的查询能够避免 CTE(这会带来其他挑战)。
由于其他GROUP BY
条件(此处未显示),我无法简单地检查MIN(DATED)
,我确实需要执行另一个查询。
performance execution-plan subquery firebird query-performance