2013-04-24 29 views
1

我有一个表active和数据表如下.. 样本数据获得对未来最近的记录日期为每个不同的PID

id  pid  chq_date 
------------------------- 
1  6  2013-07-07 
2  4  2013-10-06 
3  4  2013-07-06 
4  5  2013-01-06 
5  13  2013-09-16 
6  33  2013-09-08 
7  4  2013-02-06 
8  13  2013-01-06 
9  7  2013-07-06 
10  4  2013-08-02 

我需要得到未来最近的日期记录为每个不同从样本数据 PID所需的输出

id  pid  chq_date 
------------------------- 
1  6  2013-07-07 
3  4  2013-07-06 
5  13  2013-09-16 
6  33  2013-09-08 
9  7  2013-07-06 

我曾尝试不同的查询,但没有得到期望的结果。这似乎是最接近我的查询是

select * from active where chq_date>=sysdate and chq_date in (select 
min(chq_date) from active where pid in (select distinct pid from active)) 

Fiddle Link

+1

但PID 4似乎有2行..它是如何不同 – 2013-04-24 09:05:22

+0

敏(未来)日期aginst 4是2013年7月6日 – Sami 2013-04-24 09:10:24

+0

因此,改变你想要的输出 – sashkello 2013-04-24 09:11:52

回答

2

sashkello作为分组的答案的一些变化无法使用d这样,所以我用它在内部查询

select * from active where chq_date in (SELECT MIN(chq_date) 
FROM active WHERE chq_date >= SYSDATE GROUP BY pid) 

Fiddle Link

1

试着这么做:

SELECT 
    id, 
    pid, 
    MIN(IF(chq_date > SYSDATE, chq_date, NULL)) 
FROM active 
GROUP BY pid 

或者,如果你想删除pid S的没有即将到来的日期:

SELECT 
    id, 
    pid, 
    MIN(chq_date) 
FROM active 
WHERE chq_date > SYSDATE 
GROUP BY pid 
+0

对不起,我标记错了..它的甲骨文,所以我已经将Now()更改为sysdate,但间隔仍然需要更改。 – Sami 2013-04-24 09:14:58

+0

更改为add_months,但我仍然认为INTERVAL应该在Oracle中工作?..或不是?... – sashkello 2013-04-24 09:17:43

+0

其实,无所谓 - NULL应该可以,这应该是更通用的解决方案。 – sashkello 2013-04-24 09:20:41

相关问题