【发布时间】:2021-07-15 13:42:22
【问题描述】:
我有 2 个如下表:
create table parent_child
(
parent_id int not null,
child_id int not null
);
INSERT INTO parent_child (parent_id, child_id) VALUES (117722, 273215);
INSERT INTO parent_child (parent_id, child_id) VALUES (117722, 117936);
INSERT INTO parent_child (parent_id, child_id) VALUES (117722, 117873);
INSERT INTO parent_child (parent_id, child_id) VALUES (117722, 123305);
INSERT INTO parent_child (parent_id, child_id) VALUES (104151, 240006);
INSERT INTO parent_child (parent_id, child_id) VALUES (104151, 240005);
INSERT INTO parent_child (parent_id, child_id) VALUES (104151, 239415);
INSERT INTO parent_child (parent_id, child_id) VALUES (104151, 239414);
INSERT INTO parent_child (parent_id, child_id) VALUES (5316, 118310);
INSERT INTO parent_child (parent_id, child_id) VALUES (5316, 130627);
INSERT INTO parent_child (parent_id, child_id) VALUES (5316, 298564);
INSERT INTO parent_child (parent_id, child_id) VALUES (5316, 118311);
INSERT INTO parent_child (parent_id, child_id) VALUES (5316, 118312);
create table child
(
child_id int not null,
tstamp datetime not null,
value float,
);
-- Parent 117722
INSERT INTO child (child_id, tstamp, value) VALUES (273215, '2021-07-14 00:00:00.000000', 29);
INSERT INTO child (child_id, tstamp, value) VALUES (117936, '2021-07-14 00:00:00.000000', 52);
INSERT INTO child (child_id, tstamp, value) VALUES (117873, '2021-07-14 00:00:00.000000', 51);
INSERT INTO child (child_id, tstamp, value) VALUES (123305, '2021-07-14 00:00:00.000000', 31);
-- Parent 104151
INSERT INTO child (child_id, tstamp, value) VALUES (240006, '2021-07-14 00:00:00.000000', 37);
INSERT INTO child (child_id, tstamp, value) VALUES (240005, '2021-07-14 00:00:00.000000', 88);
INSERT INTO child (child_id, tstamp, value) VALUES (239415, '2021-07-14 00:00:00.000000', 29);
INSERT INTO child (child_id, tstamp, value) VALUES (239414, '2021-07-14 00:00:00.000000', 19);
-- Parent 5316
INSERT INTO child (child_id, tstamp, value) VALUES (118310, '2021-07-14 00:00:00.000000', 42);
INSERT INTO child (child_id, tstamp, value) VALUES (130627, '2021-07-14 00:00:00.000000', 11);
INSERT INTO child (child_id, tstamp, value) VALUES (298564, '2021-07-14 00:00:00.000000', 36);
INSERT INTO child (child_id, tstamp, value) VALUES (118311, '2021-07-14 00:00:00.000000', 22);
INSERT INTO child (child_id, tstamp, value) VALUES (118312, '2021-07-14 00:00:00.000000', 9);
-- Parent 117722
INSERT INTO child (child_id, tstamp, value) VALUES (273215, '2021-07-14 00:05:00.000000', 72);
INSERT INTO child (child_id, tstamp, value) VALUES (117936, '2021-07-14 00:05:00.000000', 99);
INSERT INTO child (child_id, tstamp, value) VALUES (117873, '2021-07-14 00:05:00.000000', 13);
INSERT INTO child (child_id, tstamp, value) VALUES (123305, '2021-07-14 00:05:00.000000', 24);
-- Parent 104151
INSERT INTO child (child_id, tstamp, value) VALUES (240006, '2021-07-14 00:05:00.000000', 65);
INSERT INTO child (child_id, tstamp, value) VALUES (240005, '2021-07-14 00:05:00.000000', 63);
INSERT INTO child (child_id, tstamp, value) VALUES (239415, '2021-07-14 00:05:00.000000', 23);
INSERT INTO child (child_id, tstamp, value) VALUES (239414, '2021-07-14 00:05:00.000000', 15);
-- Parent 5316
INSERT INTO child (child_id, tstamp, value) VALUES (118310, '2021-07-14 00:05:00.000000', 19);
INSERT INTO child (child_id, tstamp, value) VALUES (130627, '2021-07-14 00:05:00.000000', 22);
INSERT INTO child (child_id, tstamp, value) VALUES (298564, '2021-07-14 00:05:00.000000', 47);
INSERT INTO child (child_id, tstamp, value) VALUES (118311, '2021-07-14 00:05:00.000000', 54);
INSERT INTO child (child_id, tstamp, value) VALUES (118312, '2021-07-14 00:05:00.000000', 12);
子表中的数据每 5 分钟重复一次。也就是说,对于父母的每个孩子,将有 288 个数据点。这将进一步重复每一天,在一个数据点使用不同(或相同)的值。
问题:
(1) 找出parent_id、date_when_count_of_value_above_30_more_than_12_times_in_a_day、count_of_values_above_30_each_day,其中父母的所有孩子的值超过 30,每天超过 12 次,每周至少 3 天。数据点不必是连续的。换句话说,如果在某个数据点(例如 2021-07-14 00:00:00.000000)的父级的所有子级中的 MAX(value) 高于 30,那么这将被视为该父级在该日期发生的一次.
(2) 找出parent_id、latest_datetime_in_the_week、max_value_across_all_children_in_a_week,其中父级所有子级的value 最大,以及最大的日期时间。如果多个日期时间具有相同的最大值,则选择最新的日期时间。
如果这两个查询可以组合在一个查询中,那就是我想要的。否则,这些可能是 2 个不同的查询。如果是单个查询,则问题 (2) 的输出将针对问题 (1) 的每一行重复,这是可以接受的。
输入:
parent_ids 的列表,例如 WHERE parent_id IN (117722, 5316)
示例输出(如果 2 个查询合二为一;列名可以是任何内容,为简洁起见,我将使用长名称):
parent_id | date_when_count_of_value_above_30_more_than_12_times_in_a_day | count_of_values_above_30_each_day | max_value_across_all_children_in_a_week | latest_datetime_in_the_week
117722 | 2021-07-14 | 13 | 99 | 2021-07-09 16:15:00.000000
117722 | 2021-07-11 | 28 | 99 | 2021-07-09 16:15:00.000000
104151 | 2021-07-14 | 19 | 65 | 2021-07-11 18:30:00.000000
104151 | 2021-07-13 | 27 | 65 | 2021-07-11 18:30:00.000000
104151 | 2021-07-11 | 36 | 65 | 2021-07-11 18:30:00.000000
以上只是一个示例输出。当然,如果一周内出现的次数不超过 3,则 parent_id 不会出现在输出中。
【问题讨论】:
-
请用版本标记您的数据库管理系统。
-
你能解释一下288个数据点的数字吗?
-
好的.. 24*12 知道了
-
24 小时 = 1440 分钟。因此,如果数据每 5 分钟出现在表格中,那么每个孩子每天有 288 个条目
-
你能分享
value的可能差异吗?它变化的速度有多快,变化的幅度有多大,是否有“柔和的曲线”或峰值?我可以将 VerticaTIMESERIES子句与RANDOM()或RANDOMINT()函数一起使用,以每天生成 288 个均匀分布的子行,并通过几行代码生成子标识符。我可以只使用定义范围内的随机数吗?