Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle:如何使用Group by和Max(datetime)每个记录无重复_Sql_Oracle_Datetime_Group By_Max - Fatal编程技术网

Sql Oracle:如何使用Group by和Max(datetime)每个记录无重复

Sql Oracle:如何使用Group by和Max(datetime)每个记录无重复,sql,oracle,datetime,group-by,max,Sql,Oracle,Datetime,Group By,Max,我想在每条记录中按MaxDatetime分组, 但是我的查询有重复的记录。我不想要重复的记录 SQL: 但我想要结果: 您应该只按参考周期分组,为什么还要按状态分组?相反,按ref_period分组,选择maxupdate_dtm,并使用最后一个函数(如果不熟悉,请参阅文档)获取状态 请去掉多余的标签。MS sql不能同时是Oracle。我不明白为什么在Select from temp语句中需要Where子句,因为您的CTE中已经有了数据。 with temp as ( SELECT a.re

我想在每条记录中按MaxDatetime分组, 但是我的查询有重复的记录。我不想要重复的记录

SQL:

但我想要结果:

您应该只按参考周期分组,为什么还要按状态分组?相反,按ref_period分组,选择maxupdate_dtm,并使用最后一个函数(如果不熟悉,请参阅文档)获取状态


请去掉多余的标签。MS sql不能同时是Oracle。我不明白为什么在Select from temp语句中需要Where子句,因为您的CTE中已经有了数据。
with temp as 
(
SELECT a.ref_period, b.status, a.updated_dtm
 FROM ir_net_cndn_detail a,ir_net_cndn b
      WHERE a.bill_no=b.bill_no
      AND b.company_code = a.company_code     
      AND TO_DATE(a.ref_period,'MM/yyyy') >= TO_DATE(&p_ref_period_start,'MM/yyyy') 
      AND TO_DATE(a.ref_period,'MM/yyyy') <= TO_DATE(&p_ref_period_end,'MM/yyyy')      
)  

   select a.ref_period, a.status, max(updated_dtm) as updated_dtm
   from temp a
   where TO_DATE(a.ref_period,'MM/yyyy') >= TO_DATE(&p_ref_period_start,'MM/yyyy') 
   AND TO_DATE(a.ref_period,'MM/yyyy') <= TO_DATE(&p_ref_period_end,'MM/yyyy')
   group by a.ref_period, a.status
ref_period |    status  | update_dtm
01/2015  |  I   | 01/09/2016 13:29:56
01/2015  |  I   | 18/05/2017 17:01:52
01/2015  |  I   | 18/05/2017 16:16:23
07/2015  |  I   | 01/09/2016 13:29:56
07/2015  |  I   | 07/01/2016 10:17:39
08/2015  |  I   | 01/09/2016 13:29:56
09/2015  |  N   | 05/06/2017 15:59:55
09/2015  |  I   | 01/09/2016 13:29:56
10/2015  |  I   | 01/09/2016 13:29:56
ref_period |    status  | update_dtm  >> I want max(update)/1 record with no duplication
01/2015  |  I   | 18/05/2017 17:01:52
07/2015  |  I   | 01/09/2016 13:29:56
08/2015  |  I   | 01/09/2016 13:29:56
09/2015  |  N   | 05/06/2017 15:59:55
10/2015  |  I   | 01/09/2016 13:29:56
...
select   ref_period,
         min(status) keep (dense_rank last order by update_dtm) as status,
         max(update_dtm) as update_dtm
from     temp
group by ref_period