我需要一些指导和帮助来解决我不完全确定如何在 SQL Server 2012 中解决的问题。我认为LAG
and LEAD
函数可能有用,但我不确定。
这就是我的数据现在的样子:
=========================================
YearMonth LocationCode Active
=========================================
201405 123 0
201406 123 2
201409 211 1
201410 211 0
201411 214 0
201412 214 3
我们有一个YearMonth
显示每个状态的列locationCode
and an Active
int 代表每个的质量LocationCode
客观的:
我的目标是比较LocationCode
对于当前的YearMonth
(我们称之为201406
)和之前的Yearmonth
(我们称之为201405
):
一个例子 :
=========================================
YearMonth LocationCode Active
=========================================
201405 123 0
201406 123 2
基本上我想弄清楚的是如何将名为“的列”上的当前月份的行(201406)与上个月的行(201405)进行比较Active
.
如果当前月份的行Active
列为非零且上个月的 Active 为 0,则我们得出当月的行为“新”(1) else (0) 的结论。
下面提供了一个示例:
==================================================
YearMonth LocationCode Active New
===================================================
201405 123 0 0
201406 123 2 1
201409 211 1 0
201410 211 0 0
201411 214 0 0
201412 214 3 1
我怎么解决这个问题?
我认为你可以使用这样的查询:
SELECT *,
CASE
WHEN Active <> 0 AND
ISNULL(LAG(Active) OVER (PARTITION BY LocationCode ORDER BY YearMonth), 0) = 0 THEN 1
ELSE 0
END As New
FROM yourTable;
[SQL Fiddle 演示] http://sqlfiddle.com/#!3/de523/5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)