我需要通过身份编号获取最早的创建日期。这是记录的样本。
| AccountID | DisplayName | CreatedDate | IdentityNumber | OrganizationID |
|-----------|---------------|-------------|----------------|----------------|
| 1 | John | 1 Jan 2018 | 1234 | 1000 |
| 2 | John | 15 Jan 2018 | 1234 | 1001 |
| 3 | John | 20 Jan 2018 | 1234 | 1002 |
| 4 | Michael | 1 Jan 2018 | 1235 | 1000 |
| 5 | Michael | 3 Jan 2018 | 1235 | 1003 |
| 6 | Wood | 2 Jan 2018 | 1236 | 1002 |
所以我想生成这样的结果。
| AccountID | DisplayName | CreatedDate | IdentityNumber | OrganizationID |
|-----------|---------------|-------------|----------------|----------------|
| 1 | John | 1 Jan 2018 | 1234 | 1000 |
| 4 | Michael | 1 Jan 2018 | 1235 | 1000 |
| 6 | Wood | 2 Jan 2018 | 1236 | 1002 |
这是我的sql代码段
SELECT IdentityNumber, MIN(CreatedDate)
FROM Accounts
GROUP BY IdentityNumber
是的,我可以通过身份证号码获得最早的记录。但是如何在没有分组的情况下获取AccountID,DisplayName,OrganizationID?
答案 0 :(得分:1)
另一个选择是与WITH TIES
Row_Number()
子句
Select Top 1 with ties *
From dbo.Accounts
Order By Row_Number() over (Partition By IdentityNumber Order By CreatedDate)
答案 1 :(得分:0)
您可以使用ROW_NUMBER
:
;WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER( PARTITION BY IdentityNumber
ORDER BY CreatedDate)
FROM dbo.Accounts
)
SELECT AccountID,
DisplayName,
CreatedDate,
IdentityNumber,
OrganizationID
FROM CTE
WHERE RN = 1;