获取每个不同PID的最近到期日期的记录

时间:2013-04-24 09:01:53

标签: sql oracle

我有一个表格active,表格中的数据如下所示.. 示例数据

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

2 个答案:

答案 0 :(得分:2)

sashkello作为group by的回答中的一些更改不能以这种方式使用,所以我在内部查询中使用它

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

Fiddle Link

答案 1 :(得分:1)

尝试类似:

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

或者,如果您要删除没有即将到来的日期的pid

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