如何按每个客户 ID 的组 ID 获取最短日期

How to get minimum date by group id per client id

我正在尝试 Select 组 ID,以及每个客户 ID 的最短日期。

这是示例数据集。

ClientID    GroupID DataDate        
1           9       2016-05-01      
2           8       2015-04-01
3           7       2016-07-05      
1           6       2015-01-05      
1           5       2014-11-12      
2           4       2016-11-02      
1           3       2013-02-14      
2           2       2011-04-01      

我写了

SELECT 
    clientID, MIN(DataDate)  
FROM sampleTable  
GROUP BY clientID

但是在这个查询中,我没有选择 GroupID。我需要包含 GroupID 才能加入另一个 table。

如果我这样做:

Select 
    ClientID, GroupID, MIN(DataDate)  
FROM sampleTable  
GROUP BY ClientID, GroupID

它不会真正获得每个客户的最短约会时间。

你能帮帮我吗。我应该怎么做?

您可以使用 ROW_NUMBER 代替:

SELECT
    ClientID, GroupID, DataDate
FROM (
    SELECT *,
        rn = ROW_NUMBER() OVER(PARTITION BY ClientID ORDER BY DataDate)
    FROM SampleData
) t
WHERE rn = 1

如果您想要包含平局,请使用 RANK 而不是 ROW_NUMBER

希望我正确理解了你的问题。 您想要显示每个客户 ID 的最短日期

如果我的 table 有这样的数据:

    CID GID D1
    1   9   03-06-2016
    1   6   01-06-2017
    1   5   01-06-2015
    1   3   01-06-2014
    2   4   01-06-2017
    2   8   01-06-2014
    3   5   03-06-2016
    2   4   01-06-2011

输出:

    CID GID D1
    1   3   01-06-2014
    2   4   01-06-2011
    3   5   03-06-2016

这就是我认为你可以使用的方法。

select cx.cid,cx.gid, cx.d1 from cli cx  where cx.d1=(select min(c1.d1) from cli c1 where c1.cid=cx.cid)
group by cx.cid,cx.gid,cx.d1
order by cx.gid

希望对您有所帮助。