【问题标题】:Condition evaluation and applying row numbers in a table条件评估和在表中应用行号
【发布时间】:2017-12-13 23:19:36
【问题描述】:

我需要指导来解决以下问题。 我正在尝试根据条件给出行号。 这是我的情况:

ROW_NUMBER() OVER (
    PARTITION BY CLAIM_KEY, EXPOSURE_KEY, RESERVELINE_ID, TRANSACTIONSUBTYPE_DESC 
    ORDER BY TRANSACTION_CREATE_TS
)

这是我应用上述条件后的表格。 (为了简化,我在这里只举了一个例子。)

这是我想要实现的目标,但到目前为止还没有结果。

【问题讨论】:

  • 目前的结果和预期的一样,只是因为你已经按时间段排序了。你也想按 transaction_create_ts 分区吗?
  • 您好,感谢您的回复。当您在第 7 行第二次看到“reserve”时,我想将数字从 0 重置的原因是,如果之前的“reserve”“reserveline 未完成的储备”已经为 0,您可以在第 3 行看到它是 0,它再次以零打开。在这种情况下,我再次从 1 重新启动。

标签: sql tsql teradata row-number


【解决方案1】:

我认为您需要考虑将RESET WHEN 用作ROW_NUMBER() 窗口聚合的一部分。 RESET WHEN 可以包含另一个窗口聚合,以允许您回顾ROW_NUMBER 现有分区范围内的前一行,以检查数量或关闭时间戳不为空的情况。

RESET WHEN 的使用在 Teradata 15.10 的 SQL 函数、运算符、表达式和谓词手册的第 22 章中进行了说明。章节标题是有序分析/Windows 聚合函数 - 窗口特征。

希望这可以帮助您朝着正确的方向前进。

【讨论】:

  • 嗨 Rob Paller,RESET 确实有帮助!太棒了!
【解决方案2】:

您的查询似乎按预期工作。查看您预期的结果集图像,您在蓝色文本中手动添加“1、2、3、4”的行与前三行属于同一分区:

CLAIM_KEY = 165,529
EXPOSURE_KEY = 158,038
RESERVELINE_ID = 101,692
TRANSACTIONSUBTYPE_DESC = 'Reserve'

这就是 ROW_NUMBER() 继续以 4、5、6、7 递增的原因。尝试将ORDER BY CLAIM_KEY, EXPOSURE_KEY, RESERVELINE_ID, TRANSACTIONSUBTYPE_DESC 添加到完整查询的末尾,这样您就可以更清楚地看到行是如何被分区在一起的,以及为什么结果集是这样的。

【讨论】:

  • 您好,感谢您的回复。当您在第 7 行第二次看到“reserve”时,我想将数字从 0 重置的原因是,如果之前的“reserve”“reserveline 未完成的储备”已经为 0,您可以在第 3 行看到它是 0,它在第 7 行再次打开,在这种情况下,我已经从 1 再次重新启动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多