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