- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑一个表示“事件之间的时间”的列:
(5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2)
我想将这些分组到 30 个桶中,但桶会重置。期望的结果:
(0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2)
这是因为,当我们累计到 30 时,我们会“重置”并重新开始计数。因此,5 + 40 > 30,我们下降到零并开始累积加法,直到达到 30...(3 + 6 + 0 ...),这发生在我们达到第 10 个元素 == 18 时。
这可以通过 Reduce
实现函数(参见 this answer )但我不知道如何在 Teradata 中实现它?就像我需要能够引用相同的 OVER(PARTITION BY ...
在同一通话中。
打破逻辑,这是一个 Excel 示例:
在哪里,B2
有公式:=IF(B1<30, B1+A2, A2)
并相应地被拖下。专栏C
然后检查列是否 B
>=30,列 D
是列 B
的简单累积和.
最佳答案
我知道在 Teradata 中执行此操作的唯一方法是使用递归 CTE。因为我很懒,让我们将其简化为当运行总和大于 2 时要重置。为此创建并填充一个非常简单的 volatile 表:
CREATE VOLATILE TABLE vt1
(
foo VARCHAR(10)
, counter INTEGER
, bar INTEGER
)
ON COMMIT PRESERVE ROWS;
INSERT INTO vt1 VALUES ('a', 1, '1');
INSERT INTO vt1 VALUES ('a', 2, '2');
INSERT INTO vt1 VALUES ('a', 3, '2');
INSERT INTO vt1 VALUES ('a', 4, '4');
INSERT INTO vt1 VALUES ('a', 5, '1');
INSERT INTO vt1 VALUES ('b', 1, '3');
INSERT INTO vt1 VALUES ('b', 2, '1');
INSERT INTO vt1 VALUES ('b', 3, '1');
INSERT INTO vt1 VALUES ('b', 4, '2');
这是实际的选择:
WITH RECURSIVE cte (foo, counter, bar, rsum) AS
(
SELECT
foo
, counter
, bar
, bar AS rsum
FROM
vt1
QUALIFY ROW_NUMBER() OVER (PARTITION BY foo ORDER BY counter) = 1
UNION ALL
SELECT
t.foo
, t.counter
, t.bar
, CASE WHEN cte.rsum < 3 THEN t.bar + cte.rsum ELSE t.bar END
FROM
vt1 t JOIN cte ON t.foo = cte.foo AND t.counter = cte.counter + 1
)
SELECT
cte.*
, CASE WHEN rsum < 5 THEN 0 ELSE 1 END AS tester
FROM
cte
ORDER BY
foo
, counter
;
这最终会给我们:
╔═════╦═════════╦═════╦══════╦════════╗
║ foo ║ counter ║ bar ║ rsum ║ tester ║
╠═════╬═════════╬═════╬══════╬════════╣
║ a ║ 1 ║ 1 ║ 1 ║ 0 ║
║ a ║ 2 ║ 2 ║ 3 ║ 0 ║
║ a ║ 3 ║ 2 ║ 5 ║ 1 ║
║ a ║ 4 ║ 4 ║ 4 ║ 0 ║
║ a ║ 5 ║ 1 ║ 5 ║ 1 ║
║ b ║ 1 ║ 3 ║ 3 ║ 0 ║
║ b ║ 2 ║ 1 ║ 4 ║ 0 ║
║ b ║ 3 ║ 1 ║ 5 ║ 1 ║
║ b ║ 4 ║ 2 ║ 2 ║ 0 ║
╚═════╩═════════╩═════╩══════╩════════╝
case 语句为我们处理重置。
这有点丑陋,但我从来没有能够以任何其他方式让它工作。
关于sql - 在 Teradata 中达到阈值后,将一列数字 session 化为 30 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40918252/
出于好奇,我尝试了一些原型(prototype)制作,但似乎只允许在第一个位置使用子例程的原型(prototype) &。 当我写作时 sub test (&$$) { do_somethin
我需要开发一个类似于 Android Play 商店应用程序或类似 this app 的应用程序.我阅读了很多教程,发现几乎每个教程都有与 this one 类似的例子。 . 我已经开始使用我的应用程
考虑一个表示“事件之间的时间”的列: (5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2) 我想将这些分组到 30 个桶中,但桶会重置。期望的结果: (0, 1,
我是一名优秀的程序员,十分优秀!