使用Oracle分析功能,加快DISTINCT计数

时间:2019-01-31 11:22:07

标签: sql oracle function

我得查询有更好的表现:

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;

我缺少的东西或什么,我想简单地完成不值得分析的功能或者是错误的?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用GROUP BY。有时,最快。如果您在DATE字段上没有索引,则可以使用并行选项执行全表扫描。

user_messages: user_id, chat_id, timestamp
user_chats_deleted: user_id, chat_id, timestamp