Sql 客户维度

Sql 客户维度,sql,sql-server,Sql,Sql Server,我正在编写一个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

我正在编写一个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`
在此处输入代码`

,并使用distinct和case:

我要咬

从评论来看,这是一个猜测

范例

返回


这里有一个

你如何决定你要拉哪个日期?什么是活动的?为什么XXX的最大日期是最小日期,而YYYY的最小日期我认为你应该了解group by子句的用途:你自己尝试过解决这个问题吗?为什么它没有给出你想要的结果?@user6167232很乐意帮助。
select 
  distinct t.id, t.name,
  case 
    when exists (
      select 1 from tablename 
      where 
        id = t.id 
        and name <> t.name 
        and fileimportdate > t.fileimportdate) then 0 
    else 1 
  end active
from tablename t
id  name    active
1   XXX       0
1   YYY       1
2   AAA       1
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