Stored procedures 如何在过程中的单个查询中合并5个查询以减少执行时间

Stored procedures 如何在过程中的单个查询中合并5个查询以减少执行时间,stored-procedures,Stored Procedures,我希望你在我的项目中给予帮助。 我有一个名为employee_details的表。它有四列: user_id VARCHAR2(255)) user_name(VARCHAR2(255)) nickname(VARCHAR2(255)) created_on(date) 现在,我已经在过程中编写了5个单独的查询,为在sysdate-1、sysdate-30、sysdate-60、sysdate-90和sysdate期间注册/创建的用户获取数据,但我只想在单个查询中获取这些数据,这样可以减少程

我希望你在我的项目中给予帮助。 我有一个名为employee_details的表。它有四列:

user_id VARCHAR2(255)) 
user_name(VARCHAR2(255))
nickname(VARCHAR2(255))
created_on(date)
现在,我已经在过程中编写了5个单独的查询,为在
sysdate-1
sysdate-30
sysdate-60
sysdate-90
sysdate
期间注册/创建的用户获取数据,但我只想在单个查询中获取这些数据,这样可以减少程序的执行时间。请帮助我,如果需要更多细节,请告诉我

到目前为止,我写了以下查询:

1.   SELECT COUNT (DISTINCT mth.user_id)
            FROM employee_details mth                 
           WHERE mth.created_on < TO_DATE (todate, 'DD/MM/RRRR')
             AND mth.created_on >= TO_DATE (fromdate, 'DD/MM/RRRR')
                                      - 90;
2.   SELECT COUNT (DISTINCT mth.user_id)
            FROM employee_details mth                 
           WHERE mth.created_on < TO_DATE (todate, 'DD/MM/RRRR')
             AND mth.created_on >= TO_DATE (fromdate, 'DD/MM/RRRR')
                                      - 60;
3.   SELECT COUNT (DISTINCT mth.user_id)
            FROM employee_details mth                 
           WHERE mth.created_on < TO_DATE (todate, 'DD/MM/RRRR')
             AND mth.created_on >= TO_DATE (fromdate, 'DD/MM/RRRR')
                                      - 30;
4.   SELECT COUNT (DISTINCT mth.user_id)
            FROM employee_details mth                 
           WHERE mth.created_on < TO_DATE (todate, 'DD/MM/RRRR')
             AND mth.created_on >= TO_DATE (fromdate, 'DD/MM/RRRR')
                                      - 1;
5.   SELECT COUNT (DISTINCT mth.user_id)
            FROM employee_details mth                 
           WHERE mth.created_on < TO_DATE (todate, 'DD/MM/RRRR')+1
             AND mth.created_on >= TO_DATE (fromdate, 'DD/MM/RRRR');
1。选择计数(不同的mth.user\U id)
来自员工详细信息mth
其中mth.创建日期<截止日期(todate,'DD/MM/rrrrr')
和mth.created\u on>=截止日期(fromdate,'DD/MM/rrrrr')
- 90;
2.选择计数(不同的mth.user\U id)
来自员工详细信息mth
其中mth.创建日期<截止日期(todate,'DD/MM/rrrrr')
和mth.created\u on>=截止日期(fromdate,'DD/MM/rrrrr')
- 60;
3.选择计数(不同的mth.user\U id)
来自员工详细信息mth
其中mth.创建日期<截止日期(todate,'DD/MM/rrrrr')
和mth.created\u on>=截止日期(fromdate,'DD/MM/rrrrr')
- 30;
4.选择计数(不同的mth.user\U id)
来自员工详细信息mth
其中mth.创建日期<截止日期(todate,'DD/MM/rrrrr')
和mth.created\u on>=截止日期(fromdate,'DD/MM/rrrrr')
- 1;
5.选择计数(不同的mth.user\U id)
来自员工详细信息mth
其中,创建日期为<截止日期(todate,'DD/MM/RRRR')+1
和mth.created_on>=截止日期(fromdate,'DD/MM/rrrrr');
其中
fromdate
todate
将被sysdate from过程调用替换。

获取天数计数(基于您想要的时间段,即1、30、60或90等)作为过程的参数,并尝试以下操作:

此示例用于获取最近3天创建的记录(今天是2015年4月1日)

希望这能帮助你

谢谢


~Chandan

到目前为止你都试了些什么?您是否可以编辑以添加当前的查询?如果你能证明你正在试图解决这个问题,人们可以以一种更集中的方式提供帮助,这个问题不会因为“太广泛”而结束。谢谢-这让问题更清楚,表明你正在积极地解决这个问题,而不仅仅是找人为你编写代码!另一个问题-您是在寻找所有5个子查询中的单个不同用户计数,还是在寻找每个子查询的计数?嗨,Chris,我想要每个子查询单独计数,但不应该像上面的过程中那样有5个子查询。我只想要像90是最大的区别,它将首先提取,然后60,它应该从90以上提取,不应该从表中提取。你好,克里斯,请帮助我
SELECT * FROM emp_temp WHERE created_on >= DATE_ADD(CURDATE(), INTERVAL -3 DAY);