【问题标题】:Exclude rows that come before a specific column value in group SQL Teradata排除组 SQL Teradata 中特定列值之前的行
【发布时间】:2021-09-10 00:52:51
【问题描述】:

我在 Teradata 中有具有以下结构的表。一旦上传数据,我的分析就会开始,即状态列中的状态为“已上传”。我想排除在 STATUS 变为“已上传”之前出现的每个组中的行。所有事件都是实时发生的,即每个新事件的时间戳值都会增加。

输入表数据--> table_input

ID  STATUS      TMP
A1  UPLOADED    06/16/2021 08:38:44.535
A1  A           06/16/2021 16:20:40.014
A1  (B)         06/16/2021 17:15:36.488
A1  C           06/16/2021 17:15:36.846
A1  A           06/16/2021 17:15:36.883
B1  A2          06/16/2021 08:34:09.974
B1  L           06/16/2021 08:34:10.271
B1  L           06/16/2021 14:44:33.677
B1  (R)         06/16/2021 14:52:21.812
B1  UPLOADED    06/16/2021 16:05:36.346
B1  AP          06/16/2021 16:05:36.499
B1  (R)         06/16/2021 16:05:36.718
C1  C           06/16/2021 16:05:36.764
C1  UPLOADED    06/16/2021 08:49:43.796
C1  UPLOADED    06/16/2021 08:49:43.841
C1  L           06/16/2021 14:50:39.667
C1  UPLOADED    06/16/2021 14:52:50.149
C1  (R)         06/16/2021 16:05:43.998

预期输出:状态为“上传”之前的数据从结果中排除。

ID  STATUS      TMP
A1  UPLOADED    06/16/2021 08:38:44.535
A1  A           06/16/2021 16:20:40.014
A1  (B)         06/16/2021 17:15:36.488
A1  C           06/16/2021 17:15:36.846
A1  A           06/16/2021 17:15:36.883
B1  UPLOADED    06/16/2021 16:05:36.346
B1  AP          06/16/2021 16:05:36.499
B1  (R)         06/16/2021 16:05:36.718
C1  UPLOADED    06/16/2021 08:49:43.796
C1  UPLOADED    06/16/2021 08:49:43.841
C1  L           06/16/2021 14:50:39.667
C1  UPLOADED    06/16/2021 14:52:50.149
C1  (R)         06/16/2021 16:05:43.998

我正在使用 Teradata SQL,但 SQL Server SQL 也应该可以使用。 我正在尝试使用窗口功能,但尚未取得任何成功。 我们还可以将 TMP 列与 TimeStamp 一起使用并编写逻辑代码,例如排除 TimeStamp 值小于“UPLOADED”第一次出现的 TimeStamp 的所有行。

【问题讨论】:

  • @DaleK 我会记住这一点

标签: sql sql-server teradata window-functions


【解决方案1】:

您可以在 Teradata 中使用qualify 子句:

select t.*
from t
qualify tmp >= min(case when status = 'UPLOADED' then tmp end) over (partition by id);

而且,尽管您可以为此使用窗口函数,但也可以使用相关子查询来编写:

select t.*
from t
where t.tmp > (select min(t2.tmp)
               from t t2
               where t2.id = t.id and t2.status = 'UPLOADED'
              );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    相关资源
    最近更新 更多