Oracle查询和聚合函数

时间:2018-05-03 08:34:46

标签: oracle

我在oracle中有表名employee_1。如果mobile_no和sim_no相同,我想选择最大start_date。我试过了,但没有成功。请帮忙 employee_1表位于

之下
Mobile_No   Sim_NO      Start_Date         End_Date 
1111111111  1111111111  3/10/2017 21:02:44  10/10/2017 21:02:44
1111111111  1111111111  11/10/2017 21:02:44 13/10/2017 21:02:44
1111111111  1111111112  11/10/2017 21:02:44 13/10/2017 21:02:44
1111111111  1111111111  12/10/2017 21:02:44 

我想显示2行

1111111111  1111111111  12/10/2017 21:02:44
1111111111  1111111112  11/10/2017 21:02:44 13/10/2017 21:02:44

2 个答案:

答案 0 :(得分:0)

注意:您的定义,示例数据和预期结果不一致。看到您在结果中包含以下行:

1111111111  1111111112  11/10/2017 21:02:44 13/10/2017 21:02:44

其中手机号码和SIM卡号码不同。

仍然,试试这个:

编辑TOP 1已替换为LIMIT 1(Oracle)。

SELECT LIMIT 1 Mobine_No , Sim_No , Start_Date , End_Date
  FROM YourTable
 WHERE Mobine_No = Sim_No 
ORDER BY Start_Date DESC ;

替代:

SELECT Mobine_No , Sim_No , MAX(Start_Date) , End_Date
  FROM YourTable

答案 1 :(得分:0)

试试这个,希望它满足你的要求。

select mobile_no,sim_no,start_date,end_date from(
select mobile_no,sim_no,start_date,end_date,rank() over(partition by mobile_no,sim_no order by start_date desc) rn from employee_1)s
where rn=1