首页 > 解决方案 > 客户维度

问题描述

我正在编写一个 SQL 代码来创建一个客户维度。

ID Name File Import Date
1   XXX  12/30/2018
1   XXX  12/31/2018
1   XXX  1/1/2019
1   YYY  2/2/2019
1   YYY  3/2/2019
1   YYY  4/2/2019
2   AAA  1/1/2019

我想创建一个查询,我可以在其中捕获不同的名称以及历史记录

新表

ID Name     Active
1  XXX        0
1  YYY        1
2  AAA        1

下面的查询给我最新的记录

SELECT Distinct a.[ID] as CustID
,a.[Name] as CustName
FROM X as a 
inner join 
(select ID,[MaxDate] = MAX(FileImportDate) from X  group by ID   ) b 
on a.ID = b.ID 
and a.FileImportDate = b.MaxDate`

在此处输入代码`

标签: sqlsql-server

解决方案


我会咬...

根据评论,这是一个猜测

例子

Select Top 1 with ties
       ID
      ,Name
      ,Active = case when [FileImportDate] = max([FileImportDate]) over (Partition By ID) then 1 else 0 end
From  YourTable
Order By Row_Number() over (Partition By Name Order by [FileImportDate] Desc)

退货

ID  Name    Active
2   AAA     1
1   XXX     0
1   YYY     1

这是一个dbFiddle


推荐阅读