选择“分隔ID内的行”,直到第一次出现给定值



我试图在每个单独的ID中获取所有行,直到第一次出现给定值,在这种情况下是"CR",但必须颠倒行的顺序。以下是数据存储在表上的方式:

ID    DebtMth    YearMth    Status   Balance
1         5      2015-02      DR      10.00
1         4      2015-03      DR      10.00
1         3      2015-04      CR      00.00
1         2      2015-06      DR      10.00
1         1      2015-07      DR      10.00
2        10      2011-01      DR      20.00
2         9      2011-02      DR      20.00
2         8      2011-03      CR      20.00
3        11      2012-02      DR      30.00
3        10      2012-03      DR      30.00
3         8      2012-05      CR      00.00
3         7      2012-06      CR      00.00
3         6      2012-07      DR      30.00

我需要颠倒顺序,使每个ID组中的最后一行成为第一行,依此类推。

ID    DebtMth    YearMth    Status   Balance
1         1      2015-07      DR      10.00
1         2      2015-06      DR      10.00
1         3      2015-04      CR      00.00
1         4      2015-03      DR      10.00
1         5      2015-02      DR      10.00
2         8      2011-03      CR      20.00
2         9      2011-02      DR      20.00
2        10      2011-01      DR      20.00
3         6      2012-07      DR      30.00
3         7      2012-06      CR      00.00
3         8      2012-05      CR      00.00
3        10      2012-03      DR      30.00
3        11      2012-02      DR      30.00

现在,我需要在每个ID组中选择行,直到状态为"CR",并排除第一行为"CR"的任何ID。所以输出会是这样的。

ID    DebtMth    YearMth    Status   Balance
1         1      2015-07      DR      10.00
1         2      2015-06      DR      10.00
3         6      2012-07      DR      30.00

我正在使用报表生成器3中的查询设计器连接到Microsoft SQL2012服务器。

如果有任何建议,我将不胜感激。

Martin

SELECT
    id , DebtMth , YearMth , Status , Balance 
FROM
(
    SELECT
        *
        , MAX(CASE WHEN status = 'CR' THEN YearMth END) OVER(PARTITION BY id) AS first_cr_yearMth
    FROM YourTable
) AS T
WHERE YearMth > first_cr_yearMth OR first_cr_yearMth IS NULL

最新更新