比较列上当前月和上个月的行,SQL Server 2012 [英] Comparing current Month and previous Month's rows on a column, SQL Server 2012

查看:131
本文介绍了比较列上当前月和上个月的行,SQL Server 2012的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一些指导和帮助来解决一个我不太确定如何在SQL Server 2012中解决的问题.我认为LAGLEAD函数可能有用,但我不确定.

I need some guidance and help with a question I am not entirely sure how to solve in SQL Server 2012. I think LAG and LEAD functions could be useful but I am not sure.

这是我现在的数据:

=========================================
YearMonth   LocationCode    Active      
=========================================
201405      123              0  
201406      123              2  
201409      211              1
201410      211              0
201411      214              0
201412      214              3

我们有一个YearMonth列,显示每个locationCode的状态,以及一个Active int表示每个LocationCode

We have a YearMonth column that shows how the status looked like for each locationCode and an Active int that represents a quality for each LocationCode

目标:

我的目标是比较当前YearMonth(我们将其称为201406)和先前的Yearmonth(我们将其称为201405)的LocationCode:

My objective is to compare the LocationCode for for the current YearMonth (let's call it 201406) and the previous Yearmonth (let's call it 201405):

一个例子:

=========================================
YearMonth   LocationCode    Active      
=========================================
201405      123              0  
201406      123              2  

基本上,我要弄清楚的是如何比较当前月份的行(201406)和上个月的行(201405)在名为Active的列上.

Basically what I am trying to figure out is how to compare the current month's row (201406) to the previous month's row (201405) on the column called Active.

如果当前月份的行Active列为非零,而上个月的活动"列为零,那么我们得出的结论是当前月份的行为新建"(1),否则为(0).

If the current month's row Active column is a non-zero and the previous month's Active was a zero, then we conclude the current month's row to be "New" (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  

我该如何解决这个问题?

How can I solve this problem?

推荐答案

我认为您可以使用这样的查询:

I think you can use a query like this:

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演示]

这篇关于比较列上当前月和上个月的行,SQL Server 2012的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆