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

时间:2016-06-03 03:04:44

标签: sql sql-server group-by greatest-n-per-group

我正在尝试选择组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来加入另一个表格。

如果我这样做:

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

每个客户都不会获得最低日期。

你能帮助我吗?我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以改为使用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

答案 1 :(得分:0)

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

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

    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

希望它有所帮助。