`
liaobinxu
  • 浏览: 43300 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sql解惑-跟踪投资组合问题

SQL 
阅读更多
    这个谜底是给你的。 或许我是只见树木, 不见森林, 但是如果想以一种不会导致无数循环引用的优雅方式来解决问题这个问题, 似乎并不容易。
    这个谜底似乎是一个关于完整的系统, 但我的问题是: 是否存在一个方法, 在表设计阶段消除明显的循环引用。
    你必须记录一个组织中的投资问题, 以备查找、检索。 这个投资组合有很多附加属性, 这里只列出一些与此谜题相关的属性:  
create table Portfolios
(
file_id integer not null primary key,
issue_date date not null,
superseded_file_id integer not null references Portfolios(file_id),
supersedes_file_id integer not null references Portfolios(file_id)
);
下面的谜底:
1.需要记录那一个投资组合代替了当前的投资组合
2.需要记录这个投资组合替代的是那一种投资组合
3.需要能够恢复某一个投资组合(这个做的结论会替代一个或一系列投资组合, 并导致循环引用。)
4.因为issue_date的存在,能够记录日期, 但那时如果恢复某个投资组合,那就又一个难题!
5.不论select语句上的投资组合是什么, 都能够select出最新的投资组合。
6.需要能够对一些的文档重新生成审计追踪。

方法#1
因为在谜底的说明中无意表达式“前驱”和“后驱”的说法, 所以可知这个问题是处理序数计数的。让我们应用已知的嵌套集合代码代替它。
    首先, 创建一个表, 容纳每个文件的所有信息:
    create table Portfolios(
        file_id  integer not null primary key,
        other_stuff varchar2(40) not null
    );
向Profolios表中插入数据
insert into portfolios values(222,'stuff');
insert into portfolios values(223,'old stuff');
insert into portfolios values(224,'new stuff');
insert into portfolios values(225,'borrowed stuff');
insert into portfolios values(322,'blue stuff');
insert into portfolios values(323,'purple stuff');
insert into portfolios values(324,'red stuff');
insert into portfolios values(325,'green stuff');
insert into portfolios values(999,'yellow stuff');


然后创建一个表容纳文档的后继,并包含两个特殊的列: chain 和next
create table Succession(
    chain integer not null ,
    next integer default 0 not null,
    file_id integer not null references Portfolios(file_id),
    suc_date date not null,
    primary key(chain, next)
);

向succession表中插入数据
insert into Succession values(1,(select count(*) from Succession where chain=1),222,to_date('2007-11-1','yyyy-mm-dd'));
insert into Succession values(1,(select count(*) from Succession where chain=1),223,to_date('2007-11-2','yyyy-mm-dd'));
insert into Succession values(1,(select count(*) from Succession where chain=1),224,to_date('2007-11-4','yyyy-mm-dd'));
insert into Succession values(1,(select count(*) from Succession where chain=1),225,to_date('2007-11-5','yyyy-mm-dd'));
insert into Succession values(1,(select count(*) from Succession where chain=1),999,to_date('2007-11-25','yyyy-mm-dd'));

insert into Succession values(2,(select count(*) from Succession where chain=2),322,to_date('2007-11-1','yyyy-mm-dd'));
insert into Succession values(2,(select count(*) from Succession where chain=2),323,to_date('2007-11-2','yyyy-mm-dd'));
insert into Succession values(2,(select count(*) from Succession where chain=2),324,to_date('2007-11-4','yyyy-mm-dd'));

insert into Succession values(2,(select count(*) from Succession where chain=2),322,to_date('2007-11-5','yyyy-mm-dd'));
insert into Succession values(2,(select count(*) from Succession where chain=2),323,to_date('2007-11-12','yyyy-mm-dd'));
insert into Succession values(2,(select count(*) from Succession where chain=2),999,to_date('2007-11-25','yyyy-mm-dd'));


选出最新组合,无论组合怎样变化,我都能选出最新的组合:通过某个组合的max(next)找到file_id, 然后找到Portfolios就可以
select distinct * from Succession s, Portfolios p
where s.file_id =p.file_id and next=
(select max(next) from Succession s2
where s.chain=s2.chain);


完成审计功能: 通过chain, next排序就可以得到新顺序的投资计划了
select chain , next ,p1.file_id, other_stuff , suc_date
from succession s1,portfolios p1
where s1.file_id=p1.file_id
order by chain, next;


记录这个投资组合组合替代哪个投资组合
select s1. file_id , f2.file_id
from succession s1, succession s2
where s1.chain=s2.chain
and s1.next=s2.next+1 and s1.file_id=999;




分享到:
评论

相关推荐

    sql-map-2.dtd和sql-map-config-2.dtd

    引入sql-map-config-2.dtd后,开发者可以确保配置文件的语法正确,避免因格式错误导致的运行时问题。 在实际应用中,这两个DTD文件通常会被引用到对应的XML配置文件顶部,如下所示: ```xml <!DOCTYPE sqlMap ...

    flume-ng-sql-source-1.5.2.jar

    flume-ng-sql-source-1.5.2.jar从数据库中增量读取数据到hdfs中的jar包

    SQLPrompt-10.14.0.4064.exe 支持SSMS 19.1

    SQLPrompt-10.14.0.4064.exe 支持SSMS 19.1

    SQL解惑(中文版)

    根据提供的标题、描述以及部分上下文内容,我们可以推断出这本书《SQL解惑(中文版)》主要聚焦于SQL技能的提升与深化理解。虽然实际的内容并未给出具体示例或章节概述,但根据书名及简介,我们可以围绕SQL的基础...

    SQL解惑解惑

    SQL解惑解惑,意味着我们将深入探讨SQL的常见问题、概念以及解决策略。在这个过程中,我们不仅要理解SQL的基本语法,还要掌握如何有效地查询、更新和管理数据。 首先,让我们从SQL的基础开始。SQL分为四大主要部分...

    SQL解惑_pdf_againstccb_

    《SQL解惑(第2版)》是一本深入探讨SQL编程问题的专业书籍,旨在帮助读者解决在实际工作中遇到的各种SQL难题。SQL,全称为Structured Query Language,是用于管理和处理关系数据库的标准语言。这本书以问题为导向,...

    azkaban-sql-script-2.5.0.tar.gz

    这个压缩包“azkaban-sql-script-2.5.0.tar.gz”包含的是Azkaban 2.5.0版本的SQL脚本,这些脚本可能用于在数据库中设置和配置Azkaban所需的表结构和权限。以下将详细介绍Azkaban的关键概念、功能以及与SQL脚本的关系...

    squirrel-sql-3.7(小松鼠-数据库连接工具).zip

    squirrel-sql-3.7(小松鼠-数据库连接工具).zipsquirrel-sql-3.7(小松鼠-数据库连接工具).zipsquirrel-sql-3.7(小松鼠-数据库连接工具).zipsquirrel-sql-3.7(小松鼠-数据库连接工具).zip

    sqltracker-beta-v0.08.rar

    SQL Tracker是一款专为ORACLE数据库设计的SQL执行跟踪工具,其beta版v0.08的发布,为数据库管理员提供了更精细的性能监控和问题排查手段。 SQL Tracker的核心功能在于它能实时跟踪并记录应用程序执行的SQL语句,这...

    【中文】【 SQL 解惑(第2版) 】【pdf】【73.63MB】

    【中文】【 SQL 解惑(第2版) 】【pdf】【73.63MB】,提供下载地址,经典的资料,书籍,绝对经典!

    sql-map-config-2.dtd

    sql-map-config-2.dtd ibats的dtd文件

    SQL解惑(第2版)

    SQL解惑(第2版)

    flume-ng-sql-source-1.4.3.jar

    flume连接数据库

    ruoyi-vue-pro sql

    各模块的sql

    SQL SERVER-2008从入门到精通.pdf

    根据提供的文件信息,“SQL SERVER-2008从入门到精通.pdf”这一标题与描述,主要涉及的是关于SQL Server 2008的学习资料。下面将详细介绍与该主题相关的几个重要知识点。 ### 1. SQL Server 2008概述 - **版本介绍...

    Inside Microsoft SQL Server 2008 T-SQL Programming.pdf

    本书主要聚焦于T-SQL(Transact-SQL)编程语言的使用,T-SQL是SQL Server使用的SQL方言,它不仅包括标准SQL的功能,还扩展了许多专为SQL Server设计的独特特性。T-SQL编程基础部分涵盖了以下内容: - **SQL语句语法...

    Oracle数据库sql语句 跟踪器

    Oracle数据库SQL语句跟踪器,通常被称为SQL Monitor,是一种强大的工具,用于监控和分析数据库中的SQL语句执行情况。在Oracle环境中,理解SQL语句的行为是优化数据库性能的关键。SQL Monitor提供实时视图,帮助DBA...

    Oracle SQL语句跟踪

    Oracle SQL语句跟踪是数据库管理员和开发人员在优化SQL性能、定位问题或调试查询时常用的一种技术。在Oracle数据库系统中,SQL语句跟踪能够帮助我们收集关于SQL执行的详细信息,包括执行计划、资源消耗、等待事件等...

Global site tag (gtag.js) - Google Analytics