SQL Query从组BY ID获得具有最大修改日期的前1名。我怎样才能实现这一目标?

时间:2012-01-24 07:00:51

标签: sql sql-server

我有一张桌子

CREATE TABLE [dbo].[MergeAndDeleteNonprofitDetails](
    ID int IDENTITY(1,1) PRIMARY KEY,
    [ToJKNonprofitID] [int] NULL,
    [ToNGOID] [int] NULL,
    [ToOrgName] [nvarchar](400) NULL,
    [ToOrgEIN] [nvarchar](50) NULL,
    [ToJKStatus] [int] NULL,
    [ToOrganizationID] [nvarchar](max) NULL,
    [ToOrgZipCode] [nvarchar](50) NULL,
    [ToLastModifiedDate] [datetime2](7) NULL,
    [FromJKNonprofitID] [int] NULL,
    [FromNGOID] [int] NULL,
    [FromOrgName] [nvarchar](400) NULL,
    [FromOrgEIN] [nvarchar](50) NULL,
    [FromJKStatus] [int] NULL,
    [FromOrganizationID] [nvarchar](max) NULL,
    [FromOrgZipCode] [nvarchar](50) NULL,
    [FromLastModifiedDate] [datetime2](7) NULL,
    [IsMerged] [bit]
)

我需要选择包含最高ToLastModifiedDateFromLastModifiedDate GROUP BY ToOrganizationID的数据。我怎样才能实现这个目标?

注意:可能有多个数据对应一个ToOrganizationID,但FromOrganizationID不同。因此,我们需要在列之间和一行内进行比较,以找到最佳ToLastModifiedDateFromLastModifiedDate

示例数据:

sample data

1 个答案:

答案 0 :(得分:1)

with C as
(
  select *,
         row_number() over(partition by ToOrganizationID order by ToLastModifiedDate desc) as rnTo,
         row_number() over(partition by ToOrganizationID order by FromLastModifiedDate desc) as rnFrom
  from MergeAndDeleteNonprofitDetails
)
select *
from C
where rnTo = 1 or
      rnFrom = 1