建表如下( 历史拉链表):

新表(每日更新的):

实现语句:

MERGE INTO test_target t1
USING (
SELECT nvl(c.id, b.id) AS id
,CASE
WHEN c.endtime = to_date('9999-12-30', 'yyyy-mm-dd')
AND b.id IS NULL
THEN c.STATUS
WHEN c.id IS NULL
THEN b.STATUS
END AS STATUS
,CASE
WHEN c.endtime = to_date('9999-12-30', 'yyyy-mm-dd')
AND b.id IS NULL
THEN c.begain
WHEN c.id IS NULL
THEN to_date('2017-03-15', 'yyyy-mm-dd')
END AS begain
,CASE
WHEN c.endtime = to_date('9999-12-30', 'yyyy-mm-dd')
AND b.id IS NULL
THEN to_date('2017-03-15', 'yyyy-mm-dd')
WHEN c.id IS NULL
THEN to_date('9999-12-30', 'yyyy-mm-dd')
END AS endtime
FROM test_b b
FULL JOIN test_target c ON b.id = c.id
AND b.STATUS = c.STATUS
WHERE c.id IS NULL
OR (
c.endtime = to_date('9999-12-30', 'yyyy-mm-dd')
AND b.id IS NULL
)
) t2
ON (
t1.id = t2.id
AND t1.STATUS = t2.STATUS
)
WHEN MATCHED
THEN
UPDATE
SET t1.endtime = t2.endtime
WHERE t1.endtime = to_date('9999-12-30', 'yyyy-mm-dd')
WHEN NOT MATCHED
THEN
INSERT
VALUES (
t2.id
,t2.STATUS
,t2.begain
,t2.endtime
);

结果如下:

merge实现拉链表的更多相关文章

  1. 漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)

    本文将会谈一谈在数据仓库中拉链表相关的内容,包括它的原理.设计.以及在我们大数据场景下的实现方式. 全文由下面几个部分组成: 先分享一下拉链表的用途.什么是拉链表. 通过一些小的使用场景来对拉链表做近 ...

  2. 数仓1.4 |业务数仓搭建| 拉链表| Presto

    电商业务及数据结构 SKU库存量,剩余多少SPU商品聚集的最小单位,,,这类商品的抽象,提取公共的内容 订单表:周期性状态变化(order_info) id 订单编号 total_amount 订单金 ...

  3. SVN SVN合并(Merge)与拉取分支(Branch/tag)操作简介

    SVN合并(Merge)与拉取分支(Branch/tag)操作简介 合并(Merge) 例子:把对feature_branch\project_name_v3.3.7_branch的修改合并到deve ...

  4. hive拉链表

    前言 本文将会谈一谈在数据仓库中拉链表相关的内容,包括它的原理.设计.以及在我们大数据场景下的实现方式. 全文由下面几个部分组成:先分享一下拉链表的用途.什么是拉链表.通过一些小的使用场景来对拉链表做 ...

  5. DataBase 之 拉链表结构设计

    一.概念 拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史.记录一个事物从开始,一直到当前状态的所有变化的信息. 在历史表中对客户的一生的记录可能就这样几条记录,避 ...

  6. hive 汇率拉链表转日连续流水表

    1.什么是拉链表 拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史.记录一个事物从开始,一直到当前状态的所有变化的信息. 我们先看一个示例,这就是一张拉链表,存储的 ...

  7. mysql执行拉链表操作

    拉链表需求: 1.数据量比较大 2.变化的比例和频率比较小,例如客户的住址信息,联系方式等,比如有1千万的用户数据,每天全量存储会存储很多不变的信息,对存储也是浪费,因此可以使用拉链表的算法来节省存储 ...

  8. hive拉链表以及退链例子笔记

    拉链表设计: 在企业中,由于有些流水表每日有几千万条记录,数据仓库保存5年数据的话很容易不堪重负,因此可以使用拉链表的算法来节省存储空间.  例子: -- 用户信息表; 采集当日全量数据存储到 (当日 ...

  9. hive拉链表取数

    例如,一个借款用户在hive上的拉链表.(end_dt存放逻辑与普通介绍的拉链表不一致) 需要拉去它在2019-05-01日的状态, 取数逻辑是: select * from tb where sta ...

随机推荐

  1. VB6的UTF8编码解码

    'UTF-8编码  Public Function UTF8Encode(ByVal szInput As String) As String     Dim wch  As String     D ...

  2. easyui datagrid加载成功之后选定并获取首行数据

    //加载成功之后,选定并获取首行数据 onLoadSuccess:function(data){ alert("grid加载成功"); var rows=$('test').dat ...

  3. [Functional Programming] Combine Multiple State ADT Instances with the Same Input (converge(liftA2(constant)))

    When combining multiple State ADT instances that depend on the same input, using chain can become qu ...

  4. MyBatis批量添加、修改和删除

    1.批量添加元素session.insert(String string,Object o) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...

  5. redis学习笔记——应用场景

    最近在看redis入门指南,现在就自己的学习情况说说自己的理解. 字符串类型(String) 字符串类型是Redis中最基本的类型,能存储任意形式的字符串,包括二进制数据.如一张照片也可以用字符串类型 ...

  6. Android开发之JNI(一)--HelloWorld及遇到的错误解析

    Android开发之JNI(一)--HelloWorld及遇到的错误解析 1.NDK环境搭建    參考http://blog.csdn.net/xiaoliouc/article/details/8 ...

  7. grid 布局 属性示例

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  8. 使用python-nmap 搭建基本端口扫描器

    代码地址如下:http://www.demodashi.com/demo/13255.html 一.前言 注意: 本文相关教程仅供个人学习使用,切勿用于非法用途,否则造成的相关损失及影响,作者不承担任 ...

  9. Refactoring之——代码的坏味道(一)过长方法

    1 代码的坏味道 重构一书中提到了22种代码的坏味道,大致可以分为几类. 识别代码的坏味道,有助于发现代码的潜在问题,从而可以有的放矢的修改现有代码,使之不断完善. 1.1 Bloaters(臭鲱,暂 ...

  10. Fiddler-常用技巧

    1.详情面板 1).Inspectors 标签栏进行请求和响应结果分析 2).AutoResponder 对匹配 URL 进行自动返回, 可以使用字符.URL.正则表达式 3).Composer 模拟 ...