0 0

SQL 查询求值------谢谢大师3

查询求值


表一:(行情表)tb_trade_0160
ID                                DATE(日行情1)                 cusum (行情额度1)
78460                         1991-04-12                     50.00
78460                         1991-04-13                     60.00
78460                         1991-04-14                     70.00
678460                       1991-04-15                     190
78460                         1991-04-16                     200
78460                         1991-05-13                     230
78460                         1991-05-14                     250
78460                         1991-05-15                     300
78460                         1991-05-16                     350

表二 :(复权表)tb_trade_0168
ID                                DATE(日行情2)              cusum (行情额度2)
78460                         1991-04-15                     203.00
78460                         1991-05-14                     601.00
78460                         1991-05-16                     707.00
我想实现的是:
用行情表tb_trade_0160里面的(DATE(日行情1)) 这个日期去跟:(复权表)tb_trade_0168 的这个日期( DATE(日行情2))去匹对
如果相信两个日期如:DATE(日行情1) 1991-04-15   =DATE(日行情2)1991-04-15    那么此时   cusum (行情额度1)
的值应该是   cusum (行情额度2)的值    
最终实现结果如下
ID                            DATE(日行情)                  cusum (行情额度)
78460                         1991-04-12                      50.00
78460                         1991-04-13                      60.00
78460                         1991-04-14                      70.00
678460                        1991-04-15             203.00 ---重点(看看是从哪里去)
78460                         1991-04-16             203.00 ---重点(看看是从哪里去)
78460                         1991-05-13             203.00 ---重点(看看是从哪里去)
78460                         1991-05-14             601.00---重点(看看是从哪里去)
78460                         1991-05-15             601.00---重点(看看是从哪里去)
78460                         1991-05-16                         707.00
大家能看明白吧

问题补充:
haidage 写道
select    
t1.id,   
t1.date,   
cusum from tb_trade_0160 t1   
left outer join tb_trade_0168 t2 on (t1.date = t2.date) 

您好,给你解释一下。
首先要出现你的结果就要做个连接查询,两个表的左连接查询后结果是这样的
ID                  DATE(日行情)                  cusum (行情额度)
78460               1991-04-12                  null
78460               1991-04-13                  null
78460               1991-04-14                  null
678460              1991-04-15                  203.00
78460               1991-04-16                  203.00
78460               1991-05-13                  203.00
78460               1991-05-14                  601.00
78460               1991-05-15                  601.00
78460               1991-05-16                  707.00

但是cusum这个列的是要取t的值,所以在列取值的时候要做一下判断所以在
case when cusum is null then t1.cusum then t2.cusum end
这句话的意思就是如果cusum列有null值就会取表tb_trade_0160中的cusum值否则取tb_trade_0168 中的sucum的值,不知道这下你明白了吗?

很开心你给我的解释,但是你的实现方法并不是我要求实现的结果啊,我在我这里执行根本没有达到我要求的结果啊 还有你的 IS NULL 用的也不对啊,你至少要用到这个函数啊 isnull 你可能要理解一下这两个函数的区别了啊

问题补充:
haidage 写道
哦,对不起。我弄错了。这个题还挺难。一时还没有想到。对不起了。

恩,没有关系了,我很感谢你能替我分析,主要我们很难发现这个题如何下手,所以我都想了好久了都是不知道怎么解决,如果你能想到随时告诉我,我们也算认识做个技术交流的朋友
2010年4月13日 10:23

5个答案 按时间排序 按投票排序

0 0

采纳的答案

sql2008:

ids=Row_Number() over (order by t1.date)

2010年4月14日 14:23
0 0

declare  @t table(ids  int identity(1,1), id varchar(10),date datetime,custom int)
insert @t 
select  t1.id,t1.date,t2.cusum from tb_trade_0160 
t1 left join tb_trade_0168 t2 on t1.date <= t2.date
select * from @t
where ids in 
(
select min(ids) as minid 
from @t group by date
)

结果:
ids	id	date	custom
1	78460	1991-04-12 00:00:00.000	203
4	78460	1991-04-13 00:00:00.000	203
7	78460	1991-04-14 00:00:00.000	203
10	678460	1991-04-15 00:00:00.000	203
13	78460	1991-04-16 00:00:00.000	601
15	78460	1991-05-13 00:00:00.000	601
17	78460	1991-05-14 00:00:00.000	601
19	78460	1991-05-15 00:00:00.000	707
20	78460	1991-05-16 00:00:00.000	707


你表没有唯一标识列,加辅助列操作。如果是sql2008直接用rowid()也可以

2010年4月14日 14:15
0 0

哦,对不起。我弄错了。这个题还挺难。一时还没有想到。对不起了。

2010年4月14日 13:48
0 0

select    
t1.id,   
t1.date,   
cusum from tb_trade_0160 t1   
left outer join tb_trade_0168 t2 on (t1.date = t2.date) 

您好,给你解释一下。
首先要出现你的结果就要做个连接查询,两个表的左连接查询后结果是这样的
ID                  DATE(日行情)                  cusum (行情额度)
78460               1991-04-12                  null
78460               1991-04-13                  null
78460               1991-04-14                  null
678460              1991-04-15                  203.00
78460               1991-04-16                  203.00
78460               1991-05-13                  203.00
78460               1991-05-14                  601.00
78460               1991-05-15                  601.00
78460               1991-05-16                  707.00

但是cusum这个列的是要取t的值,所以在列取值的时候要做一下判断所以在
case when cusum is null then t1.cusum then t2.cusum end
这句话的意思就是如果cusum列有null值就会取表tb_trade_0160中的cusum值否则取tb_trade_0168 中的sucum的值,不知道这下你明白了吗?

2010年4月13日 15:40
0 0

[size=medium]

select 
t1.id,
t1.date,
(case when t1.cusum is null then t2.cusum else t1.cusum end) cusum // 关键是这句你看一下意思就是左连接判断t1表中cusum 是否为空为空取t2表中的cusum值否则去表一中的值
from tb_trade_0160 t1
left outer join tb_trade_0168 t2 on (t1.date = t2.date)
[/size]

2010年4月13日 11:39

相关推荐

    AI自动生成SQL语句的开源代码 sqlcoder-main.zip

    开源的AI自动生成SQL语句源代码,这款SQLCoder-70B-Alpha在文本到SQL的转换能力上超越了包括GPT-4在内的所有通用模型,它能更准确地理解你的需求,并生成相应的SQL查询。SQLCoder2和SQLCoder-7B模型已经向公众开放,...

    Inside Microsoft SQL Server 2008 T-SQL Programming.pdf

    - **函数**:探讨了标量函数和表值函数的区别,以及如何在T-SQL中使用自定义函数来增强查询的灵活性和重用性。 - **事务处理**:阐述了事务的基本概念及其在SQL Server中的实现方式,包括如何使用BEGIN TRANSACTION...

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

    本文将深入探讨与“sql-map-2.dtd”和“sql-map-config-2.dtd”相关的知识点,以及它们在Ibatis中的作用。 Ibatis是一个轻量级的ORM(对象关系映射)框架,它允许开发者将SQL语句直接写在配置文件中,通过XML映射...

    SQL2022-SSEI-Eval.exe

    SQL2022-SSEI-Eval.exe

    sql server 2012 T-SQl基础教程 源码和示例数据库

    本教程专注于Microsoft SQL Server 2012中的Transact-SQL(T-SQL)语言,这是SQL Server的主要查询语言,用于数据操作、查询、存储过程和数据库对象的编程。T-SQL是SQL Server开发者的核心技能,无论你是新手还是...

    flink-sql-connector-hive-3.1.2-2.12-1.15.4.jar

    flink-sql-connector-hive-3.1.2-2.12-1.15.4.jar

    SQL2019-SSEI-Dev.exe

    sql server 2019官方版本中文安装包,安装过程简单明了 SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型...

    flink-sql-connector-oracle-cdc-2.5-SNAPSHOT.jar

    flink-sql-connector-oracle-cdc 2.5-SNAPSHOT

    flume-ng-sql-source-release-1.5.2.zip

    这个压缩包包含了一个名为"flume-ng-sql-source-release-1.5.2.jar"的文件,这是该插件的核心组件,用于实现SQL查询以从数据库中提取数据。 Apache Flume是一个分布式、可靠且可用于有效收集、聚合和移动大量日志...

    Sql2008技术内幕-T-Sql查询

    《SQL2008技术内幕——T-SQL查询》是一本深入探讨Microsoft SQL Server 2008数据库管理系统中T-SQL(Transact-SQL)查询的权威指南。T-SQL是SQL Server的核心语言,用于数据操作、存储过程编写、触发器定义以及...

    sqlserver2005sp3-kb955706-x86-chs.exe下载

    官方发布的sqlserver2005sp3-kb955706-x86-chs.exe,现在官方已经删除了资源,我有幸下载过一份,有需要可以下载。

    SQL Server 2005 T-SQL Recipes: A Problem-Solution Approach

    书中会给出具体的SQL语句示例,并解释如何使用参数化查询避免SQL注入攻击;或者当需要根据特定条件自动执行某些操作时,则可以通过触发器来实现自动化处理。 #### 总结 《SQL Server 2005 T-SQL Recipes: A Problem...

    [电子书] SQL Server 2012 T-SQL 实用技巧 (英文版)

    对于SQL Server 2012,T-SQL的掌握至关重要,因为它直接影响到数据的查询效率、数据库设计以及应用程序的性能。 本书的核心内容可能包括以下几个方面: 1. **基础查询**:介绍如何使用SELECT语句进行基本的数据...

    SQL2019-SSEI-Eval SQL Server 2019 正式版安装引导介质

    SQL Server 2019 正式版安装引导介质,可下载ISO到本地进行安装。不支持Windows7及以下系统安装。

    flume-ng-sql-source-1.5.2

    Flume-ng-sql-source的核心功能在于,它能够定期查询指定的SQL数据库,并将查询结果作为事件流传输到Flume的数据通道中,进一步处理或存储。这一特性使得Flume可以方便地整合各种结构化数据源,如MySQL、PostgreSQL...

    flink-sql-connector-oceanbase-cdc-2.5-SNAPSHOT.jar

    flink-sql-connector-oceanbase-cdc 2.5-SNAPSHOT

    flink-sql-connector-mongodb-cdc-2.5-SNAPSHOT.jar

    flink-sql-connector-mongodb-cdc 2.5-SNAPSHOT

    x-pack-sql-jdbc-7.4.2

    这款组件的出现,极大地简化了对Elasticsearch数据的查询、分析和管理过程,同时也让那些熟悉SQL语法的开发者能够更快地融入Elasticsearch的生态环境。 一、SQL支持与兼容性 X-Pack SQL JDBC的核心功能在于它对SQL...

    flink-sql-connector-kafka-2.12-1.13.1.jar

    flink-sql-connector-kafka_2.12-1.13.1.jar 是 Apache Flink 的一个 Kafka SQL Connector 的 JAR 包,用于在 Flink SQL 环境中与 Apache Kafka 集成。这里面的数字 2.12 和 1.13.1 分别表示了这个 JAR 包所依赖的 ...

    flink-sql-connector-mysql-cdc-1.1.1.jar

    flink-sql-connector-mysql-cdc-1.1.1.jar

Global site tag (gtag.js) - Google Analytics