具有不同键结构的ORACLE SQL混合表

g

我有两个具有以下结构的表。表1有一个密钥(ID,ASOFDATE),表2有一个密钥(ID)。我想获得一个表,表3的键为表1。我正在使用ORACLE数据库。有没有办法在SQL中做到这一点?

我得到它一个asofdate的工作,但是我不知道如何对所有asofdate进行概括。

对于一个截止日期:

select ID, VALUE, ASOFDATE, max(ASOFDATE) as NEW_ASOFDATE from (
select * from TABLE 1
where ASOFDATE = '09.03.2016'
union
select * from TABLE 2
where ASOFDATE <= '09.03.2016'
)

这里是我想做的一个具体例子。

Table 1

ID  VALUE   ASOFDATE
1234    876 10.03.2016
2345    98  10.03.2016
3456    643 10.03.2016
1234    345 09.03.2016
2345    32  09.03.2016
3456    56  09.03.2016
1234    123 08.03.2016
2345    78  08.03.2016
3456    435 08.03.2016

Table 2

ID  VALUE   ASOFDATE
9876    961 10.03.2016
8765    467 09.03.2016
7654    234 08.03.2016
6543    56  07.03.2016
5432    7   06.03.2016

Table 3

ID  VALUE   ASOFDATE    NEW_ASOFDATE
1234    876 10.03.2016  10.03.2016
2345    98  10.03.2016  10.03.2016
3456    643 10.03.2016  10.03.2016
9876    961 10.03.2016  10.03.2016
8765    467 09.03.2016  10.03.2016
7654    234 08.03.2016  10.03.2016
6543    56  07.03.2016  10.03.2016
5432    7   06.03.2016  10.03.2016
1234    345 09.03.2016  09.03.2016
2345    32  09.03.2016  09.03.2016
3456    56  09.03.2016  09.03.2016
8765    467 09.03.2016  09.03.2016
7654    234 08.03.2016  09.03.2016
6543    56  07.03.2016  09.03.2016
5432    7   06.03.2016  09.03.2016
1234    123 08.03.2016  08.03.2016
2345    78  08.03.2016  08.03.2016
3456    435 08.03.2016  08.03.2016
7654    234 08.03.2016  08.03.2016
6543    56  07.03.2016  08.03.2016
5432    7   06.03.2016  08.03.2016

表2的每个条目在表1的每个日期被重复,但是每次(每个日期的每个)仅满足条件Table2.ASOFDATE <= TABLE1的表2的条目进入表3。请遵循表3。在我的示例中,ID = 8765的表2中的条目发生了什么。它两次出现在表3中。当NEW_ASOFDATE为'08 .03.2016'时,它不会出现。

托马斯·G

我认为这可以解决问题

    SELECT * FROM
    (
        SELECT DISTINCT T2ID AS ID, T2VAL AS VAL, T2DATE AS DT, T1DATE AS MAXDT
        FROM 
        (
            -- WATCH OUT : Cartesian product !
            SELECT T1.ID as T1ID, T1.Value AS T1VAL, T1.ASOFDATE AS T1DATE, T2.ID AS T2ID, T2.Value AS T2VAL, T2.ASOFDATE AS T2DATE
            FROM Table1 T1, Table2 T2 
        )

        UNION

        SELECT ID, VALUE AS VAL, ASOFDATE AS DT, ASOFDATE AS MAXDT FROM Table1
    )
    WHERE DT <= MAXDT
    ORDER BY MAXDT DESC , DT DESC, ID ASC

请注意,我无法在Oracle下对其进行测试,因为SQLfiddle Oracle再次损坏了,我在Access中对其进行了测试,并且可以正常工作。我已经针对Oracle SQL对其进行了修改,但是我可能省略了一些内容,因此您可能需要对其进行一些调整。

结果:

ID          VAL DT          MAXDT
1234    876 10.03.2016  10.03.2016 
2345    98  10.03.2016  10.03.2016 
3456    643 10.03.2016  10.03.2016 
9876    961 10.03.2016  10.03.2016 
8765    467 09.03.2016  10.03.2016 
7654    234 08.03.2016  10.03.2016 
6543    56  07.03.2016  10.03.2016 
5432    7   06.03.2016  10.03.2016 
1234    345 09.03.2016  09.03.2016 
2345    32  09.03.2016  09.03.2016 
3456    56  09.03.2016  09.03.2016 
8765    467 09.03.2016  09.03.2016 
7654    234 08.03.2016  09.03.2016 
6543    56  07.03.2016  09.03.2016 
5432    7   06.03.2016  09.03.2016 
1234    123 08.03.2016  08.03.2016 
2345    78  08.03.2016  08.03.2016 
3456    435 08.03.2016  08.03.2016 
7654    234 08.03.2016  08.03.2016 
6543    56  07.03.2016  08.03.2016 
5432    7   06.03.2016  08.03.2016  

更重要的注意事项:这样做CROSS JOIN会产生笛卡尔积,因此如果您的桌子很大,则不适合

好玩

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Oracle SQL:连接具有不同ID的日期表

来自分类Dev

具有不同名称和不同用途的相同表结构-SQL

来自分类Dev

合并具有不同结构的两个表的结果

来自分类Dev

在具有重复键的表中查找具有不同键的最新记录

来自分类Dev

SQL Server:连接具有不同结构的4-5表

来自分类Dev

具有外键的组合主键输出到不同的表

来自分类Dev

SQL选择具有相同键和不同列的行

来自分类Dev

Oracle-具有复杂用户结构的递归SQL

来自分类Dev

具有不同的 SQL 更新表

来自分类Dev

SQL Server:查询以将数据从具有不同结构的另一个表插入表中

来自分类Dev

oracle plsql-具有不同表的select语句

来自分类Dev

oracle-汇总具有不同值的分组表

来自分类Dev

如何使用 Oracle Goldengate 从多个数据库中提取数据并复制到一个具有不同表结构的数据库?

来自分类Dev

Oracle SQL的id具有不同的值时

来自分类Dev

从表中引用具有不同类别的混合单元格

来自分类Dev

没有为具有相同表但结构不同的模型存储密码

来自分类Dev

将类映射到具有不同表名但列结构相同的表

来自分类Dev

删除具有主键的表中的行以及具有外键的不同表中的相关行

来自分类Dev

具有3个不同表的外键和主键的UPDATE设置表

来自分类Dev

SQL将数据插入表中具有外键

来自分类Dev

SQL将数据插入表中具有外键

来自分类Dev

如何在具有不同表结构的数据库之间复制数据?

来自分类Dev

提取具有混合元素类型的表数据

来自分类Dev

与具有排序结果集的表连接时,与Ms-Sql和Oracle相比,mySql的不同行为

来自分类Dev

使用 ORACLE SQL 从具有不同 ID 的同一个表中查找重复项?

来自分类Dev

两个具有不同列的表的SQL联合

来自分类Dev

合并具有不同列的表(SQL Server)

来自分类Dev

如何从具有相同列名的不同表创建SQL视图?

来自分类Dev

SQL-如何创建具有不同表类型的联接?

Related 相关文章

  1. 1

    Oracle SQL:连接具有不同ID的日期表

  2. 2

    具有不同名称和不同用途的相同表结构-SQL

  3. 3

    合并具有不同结构的两个表的结果

  4. 4

    在具有重复键的表中查找具有不同键的最新记录

  5. 5

    SQL Server:连接具有不同结构的4-5表

  6. 6

    具有外键的组合主键输出到不同的表

  7. 7

    SQL选择具有相同键和不同列的行

  8. 8

    Oracle-具有复杂用户结构的递归SQL

  9. 9

    具有不同的 SQL 更新表

  10. 10

    SQL Server:查询以将数据从具有不同结构的另一个表插入表中

  11. 11

    oracle plsql-具有不同表的select语句

  12. 12

    oracle-汇总具有不同值的分组表

  13. 13

    如何使用 Oracle Goldengate 从多个数据库中提取数据并复制到一个具有不同表结构的数据库?

  14. 14

    Oracle SQL的id具有不同的值时

  15. 15

    从表中引用具有不同类别的混合单元格

  16. 16

    没有为具有相同表但结构不同的模型存储密码

  17. 17

    将类映射到具有不同表名但列结构相同的表

  18. 18

    删除具有主键的表中的行以及具有外键的不同表中的相关行

  19. 19

    具有3个不同表的外键和主键的UPDATE设置表

  20. 20

    SQL将数据插入表中具有外键

  21. 21

    SQL将数据插入表中具有外键

  22. 22

    如何在具有不同表结构的数据库之间复制数据?

  23. 23

    提取具有混合元素类型的表数据

  24. 24

    与具有排序结果集的表连接时,与Ms-Sql和Oracle相比,mySql的不同行为

  25. 25

    使用 ORACLE SQL 从具有不同 ID 的同一个表中查找重复项?

  26. 26

    两个具有不同列的表的SQL联合

  27. 27

    合并具有不同列的表(SQL Server)

  28. 28

    如何从具有相同列名的不同表创建SQL视图?

  29. 29

    SQL-如何创建具有不同表类型的联接?

热门标签

归档