我正在尝试根据日期范围之间另一列的顺序将值分配给重复值。重复的值在名称列中。我本来打算将一个案例声明放在一起,但是认为它不会产生我想要的结果,如下所示:
发件人:
Name Action Date
0001 Update 2017-01-02
0001 Update-A 2017-02-09
0001 Update-A 2017-03-02
0001 Update-A 2017-01-05
0002 Update-A 2017-02-18
0002 Update-A 2017-03-17
0003 Update-A 2017-02-09
0003 Update 2018-09-09
如果操作全部,并且只有Update-A,则名称将分配给类别1。
如果操作包含多个值,其中Update-A是最后一个操作,则该名称将分配给类别2。
如果操作包含多个值,其中Update-A是更新之前的操作,则名称将分配给类别3。
收件人:
Name Action Date Category
0001 Update 2017-01-02
0001 Update-A 2017-02-09 2
0001 Update-A 2017-03-02
0001 Update-A 2017-01-05
0002 Update-A 2017-02-18 1
0002 Update-A 2017-03-17
0003 Update-A 2017-02-09
0003 Update 2018-09-09 3
Sample:
Select Name, Max(Date), Category=
Case
When Action='Update-A' (all) then '1'
When Action='Update-A' (last) then '3'
When Action='Update-A' (first) then '2'
Else 'N/A'
答案 0 :(得分:1)
窗口功能是您最好的选择:
Select Name, Max(Date), Category=
(case when min(action) over (partition by name) = 'Update-A' and
max(action) over (partition by name) = 'Update-A'
then '1'
when max(date) over (partition by name) =
max(case when action = 'Update-A' then date end)
then '3'
when max(case when action = 'Update-A' then date end) <
max(cate when action = 'Update' then date end)
then '2'
else 'N/A'
end) as category
我不能100%地确定类别2正是您想要的,但是它适用于您数据中的示例。