根据日期按不同列的值顺序将值分配给数据

时间:2018-10-23 00:54:08

标签: sql sql-server

我正在尝试根据日期范围之间另一列的顺序将值分配给重复值。重复的值在名称列中。我本来打算将一个案例声明放在一起,但是认为它不会产生我想要的结果,如下所示:

发件人:

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'

1 个答案:

答案 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正是您想要的,但是它适用于您数据中的示例。