2013-04-24 28 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

相關問題