我想从设定值添加序列nr。
输出可能吗?
p_id date days OUTPUT(what i want)
3385 2012-02-02 556 0
3385 2012-02-03 1 1
3385 2012-09-24 234 0
3385 2012-09-25 1 1
3385 2013-11-12 413 0
3385 2013-11-13 1 1
3385 2013-11-14 1 2
3385 2013-11-15 1 3
3385 2014-09-09 298 0
3385 2014-09-10 1 1
3385 2014-09-11 1 2
3385 2015-11-11 426 0
3385 2015-11-12 1 1
3385 2015-11-13 1 2
3385 2015-11-14 1 3
3385 2015-11-15 1 4
3385 2015-11-16 1 5
3385 2015-11-17 1 6
3385 2015-11-18 1 7
3385 2015-11-19 1 8
3385 2015-11-20 1 9
天数栏计算从该行开始的天数。
如果天数值大于5则开始新的" 0"然后是一个新的序列号。
答案 0 :(得分:5)
试试这个:
SELECT p_id, [date], days,
ROW_NUMBER() OVER (PARTITION BY p_id, grp
ORDER BY [date]) - 1 AS [OUTPUT]
FROM (
SELECT p_id, [date], days,
SUM(IIF(days > 5, 1, 0)) OVER (PARTITION BY p_id
ORDER BY [date]) AS grp
FROM mytable ) AS t
<强>解释强>
内部查询使用SUM() OVER()
生成以下输出:
p_id date days grp
===============================
3385 2012-02-02 556 1
3385 2012-02-03 1 1
3385 2012-09-24 234 2
3385 2012-09-25 1 2
3385 2013-11-12 413 3
3385 2013-11-13 1 3
3385 2013-11-14 1 3
3385 2013-11-15 1 3
3385 2014-09-09 298 4
3385 2014-09-10 1 4
3385 2014-09-11 1 4
3385 2015-11-11 426 5
3385 2015-11-12 1 5
3385 2015-11-13 1 5
3385 2015-11-14 1 5
3385 2015-11-15 1 5
3385 2015-11-16 1 5
3385 2015-11-17 1 5
3385 2015-11-18 1 5
3385 2015-11-19 1 5
3385 2015-11-20 1 5
grp
字段实际上是&#39;大于5&#39; 出现的运行总计。在外部查询中使用此字段,我们可以使用ROW_NUMBER
窗口函数轻松生成所需的枚举。