使用group by-SQL获取最早的约会

时间:2018-01-24 16:39:23

标签: sql-server

我需要通过身份编号获取最早的创建日期。这是记录的样本。

| 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?

2 个答案:

答案 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;