我正在尝试选择组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
每个客户都不会获得最低日期。
你能帮助我吗?我该怎么做?答案 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
希望它有所帮助。