我有一张桌子
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]
)
我需要选择包含最高ToLastModifiedDate
和FromLastModifiedDate
GROUP BY ToOrganizationID
的数据。我怎样才能实现这个目标?
注意:可能有多个数据对应一个ToOrganizationID
,但FromOrganizationID
不同。因此,我们需要在列之间和一行内进行比较,以找到最佳ToLastModifiedDate
和FromLastModifiedDate
。
示例数据:
答案 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