【发布时间】:2019-01-31 11:22:06
【问题描述】:
我必须得到一个查询才能更好地执行:
SELECT COUNT(DISTINCT T.ID)
FROM MY_TABLE T
WHERE T.DATE BETWEEN ADD_MONTHS(TO_DATE('01/12/2018', 'dd/mm/yyyy'), -6) AND
LAST_DAY(TO_DATE('01/12/2018', 'dd/mm/yyyy'));
此查询输出参考日期前 6 个月内该标志的不同出现次数。
我尝试使用 Oracle 分析函数,但没有一个示例在网上找到工作,也没有我得出的结果:
SELECT COUNT(DISTINCT T.ID) OVER(RANGE BETWEEN ADD_MONTHS(TO_DATE('01/12/2018', 'dd/mm/yyyy'), -6) AND LAST_DAY(TO_DATE('01/12/2018', 'dd/mm/yyyy')))
FROM MY_TABLE T;
我是否遗漏了什么,或者我想要完成的事情根本不值得分析函数,或者只是错了?
提前致谢。
【问题讨论】:
-
您缺少
ORDER BY子句。 -
分析函数不是为了性能。您可能应该尝试为 date,id 添加索引
-
我确实有一个日期的 ID,但提取仍然需要很多时间。