请以最详细的方式解释这段代码with a0 as ( select distinct model_code, case when isname in ('冷柜', '冰箱') then '制冷' when isname in ('商空','智慧楼宇') then '智慧楼宇' when isname in ('家空') then '空调' else isname end isname, curstatus, mtname from dh_yf.dim_udo_model_dim where isname in('冷柜', '冰箱', '商空', '家空', '热水器', '洗涤', '厨电','智慧楼宇') and curstatus = '在用' ), a1 as ( select model_code, drsj, row_number() over(partition by model_code order by drsj asc) as top from dh_yf.dwd_model_db_al where drsj is not null and drsj <> '' ), a2 as ( select model_code as code, drsj from a1 where top = 1 ), a3 as ( select a.model_code, isname, curstatus, mtname, b.drsj, b.code from a0 a left join a2 b on a.model_code=b.code ), a4 as( select model_code, isname, curstatus, mtname, drsj from a3 where code is null ), a5 as ( select model_code, isname, curstatus, mtname, drsj from a3 where code is not null and mtname in('吸附发泡','泡沫') and datediff( from_unixtime(unix_timestamp(), 'yyyy-MM-dd'), from_unixtime(unix_timestamp(drsj, 'yyyy-MM-dd'), 'yyyy-MM-dd') ) > 365 union all select model_code, isname, curstatus, mtname, drsj from a3 where code is not null and mtname not in('吸附发泡','泡沫') and datediff( from_unixtime(unix_timestamp(), 'yyyy-MM-dd'), from_unixtime(unix_timestamp(drsj, 'yyyy-MM-dd'), 'yyyy-MM-dd') ) > 365*3 ) insert OVERWRITE table dh_yf.tg_dim_udo_model_bf select model_code, isname, curstatus, mtname, drsj from a4 union select model_code, isname, curstatus, mtname, drsj from a5
时间: 2024-02-14 18:18:49 浏览: 69
这是一段 SQL 代码,用于从数据库中查询数据并将结果插入到目标表格中。这段代码包含了六个子查询,分别是 a0、a1、a2、a3、a4 和 a5,并使用了 with 语句来创建这些子查询。下面是这些子查询的具体作用:
- a0 子查询:从表格 dh_yf.dim_udo_model_dim 中查询数据,并根据 isname 字段进行分类处理,将其映射成产品分类(制冷、智慧楼宇、空调等)。然后选取 model_code、isname、curstatus 和 mtname 字段作为结果。
- a1 子查询:从表格 dh_yf.dwd_model_db_al 中查询数据,选取 model_code 和 drsj 字段,并对 drsj 字段进行排序,计算出每个 model_code 的第一条 drsj 记录,并选取其对应的 top 值。
- a2 子查询:从 a1 子查询的结果中选取第一条记录,并选取 code 和 drsj 字段作为结果。
- a3 子查询:将 a0 和 a2 子查询的结果进行联接,选取 a0 子查询中的 model_code、isname、curstatus、mtname 字段和 a2 子查询中的 drsj 和 code 字段作为结果。
- a4 子查询:从 a3 子查询的结果中选取 code 为空的记录,并选取 model_code、isname、curstatus、mtname 和 drsj 字段作为结果。
- a5 子查询:从 a3 子查询的结果中选取 code 不为空的记录,并根据 mtname 字段和 drsj 字段进行分类处理。如果 mtname 为 '吸附发泡' 或 '泡沫',并且 drsj 距离当前日期大于 365 天,则选取 model_code、isname、curstatus、mtname 和 drsj 字段作为结果;否则,如果 mtname 不为 '吸附发泡' 或 '泡沫',并且 drsj 距离当前日期大于 3 年,则选取 model_code、isname、curstatus、mtname 和 drsj 字段作为结果。
- 最终,将 a4 和 a5 子查询的结果合并,并插入到表格 dh_yf.tg_dim_udo_model_bf 中。
阅读全文