Teradata 使用不包括重复条件的窗口函数计算行数

问题描述 投票:0回答:1

我的 Teradata 表中有以下数据,我试图根据某些条件将行数设为“TENURE”

  Id    MONTH            ORDERNO       STATUS
  101   2022-01-31        105           00
  101   2022-02-28        105           00
  101   2022-03-31        106           00
  101   2022-04-30        106           07
  101   2022-05-31        106           07
  102   2022-01-01        105           00
  102   2022-02-28        105           00
  102   2022-03-31        105           07
  102   2022-04-28        105           07

想要

  Id     TENURE
  101      4
  102      3
  

我必须排除 STATUS='07' 的第 2 次出现并计算月数

我正在使用以下窗口函数来获取行数,但我不知道如何 添加 status='07' 过滤器

 SELECT id,
      COUNT(*) OVER (PARTITION BY id ORDER BY MONTH ROWS BETWEEN UNBOUNDED PRECEDING AND 
  UNBOUNDED FOLLOWING) AS TENURE FROM Have;

我分别得到以下而不是 4 和 3

  Id     TENURE
  101      5
  102      4
count sql-order-by teradata partition-by
1个回答
0
投票

您的示例有些不正确(顺便说一句,“MONTH”应该在引号中,因为它是保留字)。

INSERT INTO DWHPRO.HAVE (Id, "MONTH", ORDERNO, STATUS) 值 (101, '2022-01-31', 105, '00'), (101, '2022-02-28', 105, '00'), (101, '2022-03-31', 106, '00'), (101, '2022-04-30', 106, '07'), (101, '2022-05-31', 106, '07'), (102, '2022-01-01', 105, '00'), (102, '2022-02-28', 105, '00'), (102, '2022-03-31', 105, '07'), (102, '2022-04-28', 105, '07');

SELECT id, COUNT(*) OVER (PARTITION BY id ORDER BY MONTH ROW BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS TENURE FROM Have;

您的查询提供:

101,5

101,5

101,5

101,5

101,5

102,4

102,4

102,4

102,4

我假设你想按月计算?

© www.soinside.com 2019 - 2024. All rights reserved.