如何在SQL中按两列匹配生成行号分区

时间:2018-07-02 13:15:46

标签: sql row-number partition-by

Tbl1

---------------------------------------------------------
Id      Date        Qty      ReOrder
---------------------------------------------------------
1       1-1-18      1        3
2       2-1-18      0        3
3       3-1-18      2        3
4       4-1-18      3<      >3
5       5-1-18      2        3
6       6-1-18      0        3
7       7-1-18      1        3
8       8-1-18      0        3
---------------------------------------------------------

我想要下面的结果

---------------------------------------------------------
Id      Date        Qty      ReOrder
---------------------------------------------------------
1       1-1-18      1        3
5       5-1-18      2        3
---------------------------------------------------------

如果ReOrder与Qty不相同,那么日期将保持不变,直到reorder = Qty

1 个答案:

答案 0 :(得分:0)

您可以将累积方法与MachineKeys函数一起使用:

row_number()

不幸的是,这需要 SQL Server ,但是您也可以这样做:

select top (1) with ties *
from (select *, max(case when qty = reorder then 'v' end) over (order by id desc) grp
      from table
     ) t
order by row_number() over(partition by grp order by id);