1

我有一个表格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))

小提琴链接

4

2 回答 2

2

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

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

小提琴链接

于 2013-04-24T10:28:35.010 回答
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
于 2013-04-24T09:07:28.863 回答