想要实现带条件的聚合方式, 有办法实现吗?
#45302
-
比如有这样的一个表, 聚合字段希望其能在某个区间做 min 聚合, 超出区间则用 replace create table if not exists t_temp (
a int not null,
b datev2 if(datediff(new, old) <= 3, min, replace) -- 这里的 new 表示要写入的数据值, old 表示已有的值
)
aggregate key(a)
distributed by hash(a) buckets auto
properties (
"replication_allocation" = "tag.location.default: 1"
);
insert into t_temp values(1, '2024-01-01'); -- 写入后 b 的值预期是 2024-01-01
insert into t_temp values(1, '2024-01-04'); -- 写入后 b 的值预期是 2024-01-01, 新旧时间的差异在 3 以内则用 min
insert into t_temp values(1, '2024-01-05'); -- 写入后 b 的值预期是 2024-01-05, 新旧时间的差异超过了 3 则用 replace 同样的功能, 用 mysql 可以通过下面的方式来完成 drop table if exists t_temp;
create table t_temp (
a int primary key,
b date
);
insert into t_temp values(1, '2024-01-01')
on duplicate key update b =
if(datediff(values(b), t_temp.b) <= 3, if(values(b) < t_temp.b, values(b), t_temp.b), values(b));
-- 写入后 b 的值是 2024-01-01
select * from t_temp;
insert into t_temp values(1, '2024-01-04')
on duplicate key update b =
if(datediff(values(b), t_temp.b) <= 3, if(values(b) < t_temp.b, values(b), t_temp.b), values(b));
-- 写入后 b 的值是 2024-01-01, 新旧时间的差异在 3 以内则用 min
select * from t_temp;
insert into t_temp values(1, '2024-01-05')
on duplicate key update b =
if(datediff(values(b), t_temp.b) <= 3, if(values(b) < t_temp.b, values(b), t_temp.b), values(b));
-- 写入后 b 的值是 2024-01-05, 新旧时间的差异超过了 3 则用 replace
select * from t_temp;
drop table t_temp; |
Beta Was this translation helpful? Give feedback.
Answered by
ixzc
Dec 13, 2024
Replies: 1 comment
-
中文问题推荐在社区论坛提问。 |
Beta Was this translation helpful? Give feedback.
0 replies
Answer selected by
liuanxin
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
中文问题推荐在社区论坛提问。