0 0

查询子表各记录某属性和,如何写?挺麻烦的,困扰了一周。。。25

需求是这样,需要得出特定某天,所有状态不为1的所有帐户的总余额。
帐户表的数据量是20000条,交易记录表的数据是30-50万条之间。

两个表的主键都是自定义序列自动增长。  表结构不能改了。因为有原始数据。   谢谢各位帮忙给我看看。我写了一条很麻烦的,可是结果不正确。
我的思路是:查询交易记录表,根据帐户外键分组条件内加上状态不为1,取得小于特定日期各个帐户的最大交易日期,取得这条数据的余额,然后进行累加。

我写的语句是:
select sum(jyjl1.ye) from jyjl jyjl1 join left (
      select max(jyrq) rq1, z1.id zid from jyjl jl1 join left zhb z1 on jl1.zhid=z1.id  
      where z1.zt !=1 and jl1.jyrq < to_date('2008-01-20 20:20:20', 'yyyy-MM-dd hh24:mi:ss') 
      group by zhid
) rs1 on jyjl1.jyrq=rs1.rq1 
where jyjl1.zhid=rs1.zid

有两个表,一个主表(帐户表),一个子表(帐户操作记录表),结构大概是这样:

jyjl(交易记录表):

id(主键)                      jyrq(交易日期)                       zcje(支出金额)                        ye(余额)                 zhid(帐户id外键)

2                                 2008-01-30 19:30:34               50                                        950                              3
1                                 2008-01-20 20:20:20               5000                                   1000                             3
5                                 2008-01-20 10:28:23               500                                      6000                            3
3                                 2009-12-31 05:30:20               2000                                    100                              4
4                                 2008-03-30 10:28:23               500                                      2100                            4
6                                 2008-03-28 10:28:23               500                                      2600                            4
7                                 2008-02-28 10:28:23               500                                      3100                            4
7                                 2009-02-28 10:28:23               500                                      10000                          5



zhb(帐户表)
id(主键)                    xm(姓名)                                xb(性别)                              xzye(现在余额)                zt状态

3                                 张二                                          男                                           950                                     0
4                                 张三                                          男                                           100                                     0
5                                 李四                                          男                                           10000                                 1




谢谢!!谢谢!

问题补充:
mginobili 写道
先创建一个视图 其中记录形式为
jyrq(char型yyyy-mm-dd), id, ye, zhid
也就是先根据日期 得到当天最大的id 那么这个余额肯定是当天的最后余额
create view myjyjl as
select rqid.rq, jyjl.id,jyjl.yes,jyjl.zhid from 
from
(
select to_char(jyrq,'yyyy-mm-dd') rq, max(id)
from jyjl group by rq
) rqid
join left jyjl on rqid.id = jyjl.id


然后再根据提供的日期来过滤一下就可以咯
select * from myjyjl where rq = to_char(一个date型, 'yyyy-mm-dd')


这是我的思路 lz斟酌斟酌~
因为手头没有oracle数据库
lz看着改改~


谢谢你回复,但是最大的ID不一定是最大日期。。还有别的方法吗?

问题补充:
mginobili 写道
引用
但是最大的ID不一定是最大日期。。还有别的方法吗?


这个不合理哟

按道理说,自动增长的应该是最大ID,就是最大日期。但是我刚开始就是按照最大ID取得,数据不正确,所以才如此头疼。。。埃。。。

问题补充:
dmewy 写道
select sum(j2.YE) from (
select z.xm,z.xb,j.zhid, MAX(JYRQ) as JYRQ 
from zhb z 
join jyjl j
on z.id=j.zhid
where  z.zt<>1 AND J.JYRQ<=to_date('2008-3-30 10:28:23','yyyy-MM-dd hh:mi:ss')
group by z.xm,z.xb,j.zhid) A
join jyjl j2
on A.zhid=j2.zhid and a.JYRQ=j2.JYRQ


对不起,这些天比较忙,一直没上来。我看过代码了。我最后写的代码也是这样的。可是还区取不到正确的值,你可以试下,加这个双重的判定条件也跟直接取ID是一样的效果。会有很多重复数据。
2010年1月21日 22:26

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

0 0

select sum(x.ye)
  from from jyjl x,
(
select zhid,max(jyrq) as lasttime
  from jyjl
where jyrq=max(jyrq)
   and jyrq<to_date('2008-01-20 20:20:20', 'yyyy-MM-dd hh24:mi:ss')
group by zhid
) y,
  zhb z
where x.zhid=y.zhid
   and x.jyrq=y.lasttime
   and x.zhid=z.id
   and z.zt<>1

行不行?
1 先得到某个账户在确定日期前最大时间对应的记录
2 该记录即为这个日期的最终余额
3 合计

2010年2月03日 13:41
0 0

放到临时表,加一自增列(按时间赋值)就行了。

2010年2月01日 09:42
0 0

楼主为何不看看我贴的SQL?

2010年1月26日 10:14
0 0

引用
但是最大的ID不一定是最大日期。。还有别的方法吗?


这个不合理哟

2010年1月25日 16:31
0 0

select sum(a.ye) from jyjl a,(select max(jyrq) rq,zhid from jyjl group by zhid) b,zhb c where a.jyrq = b.rq and a.zhid= b.zhid and a.zhid = c.zhid and c.zt <> 1


你可以试试以上语句

2010年1月22日 16:32
0 0

最好把建表脚本附上.

2010年1月22日 15:40
0 0

select sum(j2.YE) from (
select z.xm,z.xb,j.zhid, MAX(JYRQ) as JYRQ 
from zhb z 
join jyjl j
on z.id=j.zhid
where  z.zt<>1 AND J.JYRQ<=to_date('2008-3-30 10:28:23','yyyy-MM-dd hh:mi:ss')
group by z.xm,z.xb,j.zhid) A
join jyjl j2
on A.zhid=j2.zhid and a.JYRQ=j2.JYRQ

2010年1月22日 11:07
0 0

先创建一个视图 其中记录形式为
jyrq(char型yyyy-mm-dd), id, ye, zhid
也就是先根据日期 得到当天最大的id 那么这个余额肯定是当天的最后余额

create view myjyjl as
select rqid.rq, jyjl.id,jyjl.yes,jyjl.zhid from 
from
(
select to_char(jyrq,'yyyy-mm-dd') rq, max(id)
from jyjl group by rq
) rqid
join left jyjl on rqid.id = jyjl.id


然后再根据提供的日期来过滤一下就可以咯
select * from myjyjl where rq = to_char(一个date型, 'yyyy-mm-dd')


这是我的思路 lz斟酌斟酌~
因为手头没有oracle数据库
lz看着改改~

2010年1月21日 23:08

相关推荐

    sql查询表中某字段下所有重复的记录

    sql查询表中某字段下所有重复的记录,删除某字段下重复记录最小的那笔记录

    arcengine实现属性查询,查询结果闪烁居中并高亮显示

    在ArcEngine中,属性查询是GIS(地理信息系统)开发中一个关键的功能,它允许用户根据特定的条件筛选和检索地图上的图层数据。本示例着重讲解如何利用ArcEngine API来实现这一功能,并且使查询结果在地图上以闪烁、...

    MySQL数据库:相关子查询.pptx

    在这个例子中,外部查询`members`表的每个`用户号`都会与子查询中的`sell`表的`用户号`进行比较,只有当子查询在`sell`表中找到匹配的销售记录时,外部查询的当前行才会被选取。 相关子查询的应用场景广泛,例如在...

    实体属性变更历史记录框架-变更历史记录从此无忧

    本实例提供了一个实体属性变更历史记录工具类,只要写很少的代码就能实现强大的变更历史记录功能.本工具类的主要优点是1.工具类对实体对象没有依赖性,任何对象都能记录历史.2.只要编写很少的代码就能实现需求. 3.所有...

    arcengine属性表操作代码

    3. **属性表查询**:ArcEngine提供了多种查询方式,如SQL查询、空间查询和定义查询。使用IQueryFilter接口可以实现基于属性的查询,比如选择满足特定条件的记录。同时,通过使用ICursor和IRow接口,你可以进一步处理...

    vs2010c#开发arcengine实现按属性选择和按位置(空间)查询

    在本文中,我们将深入探讨如何使用VS2010 C#和ArcEngine来实现属性查询以及基于位置(空间)的查询。ArcEngine是Esri公司提供的一个强大的GIS开发平台,它允许开发者创建桌面、Web以及移动GIS应用程序。通过C#语言,...

    DBGridEh表中表

    当用户选择主表中的某一记录时,对应的从表记录会在子表中显示,这样用户就可以直观地看到两个表之间的关联信息。 实现DBGridEh的主从表“表中表”显示,首先需要设置好数据源(如TClientDataSet或TDataSource)。...

    vs2010c#的arcengine按属性选择,并把选择的记录导出新shp,可以批量

    在本文中,我们将深入探讨如何使用C#编程语言与ArcEngine进行交互,实现基于属性的查询功能,并将查询结果导出为新的Shapefile(shp)格式,支持批量操作。ArcEngine是由Esri公司开发的一个强大的GIS开发工具,它...

    SQL查询技巧(范例宝典)

     实例339 利用聚合函数First或Last求数据表中第一条或最后一条记录 496  10.11 多表查询(连接查询) 498  实例340 利用FROM子句进行多表查询 498  实例341 使用表别名 499  实例342 合并多个结果集...

    自定义多条件查询及保存、提取查询条件示例

    &lt;P&gt;&lt;P&gt;原理:在窗体启动时把需要查询的表中的所有字段名读取到一个组合框中,设定两个变量来保存查询用的SQL语句及显示给用户看的SQL语句,每点击一次添加条件,就在SQL语句中加一个条件,最后用该SQL语句做为查询...

    geoserver wfs过滤查询

    在GIS(地理信息系统)领域,GeoServer是一款开源的、基于Java的服务器软件,它能够发布和操作地理空间数据。WFS(Web Feature Service)是OGC(Open Geospatial Consortium)制定的一种标准接口,用于在网络上交换...

    sql由入库单与出库单统计库存

    2. **子查询**:通过子查询首先统计出库表中的商品总数,然后将其与入库表中的相应记录进行比较。 3. **聚合函数**:使用`SUM()`函数来汇总每个商品的入库数量和出库数量。对于出库数量,使用`ISNULL()`函数来处理...

    SQL高级查询技术.doc

    子查询是SQL语言的另一项强大特性,允许在一个查询语句中嵌套另一个查询语句,从而实现更复杂的数据筛选和处理。 - **子查询的使用场合**:当查询依赖于另一个查询的结果时,子查询变得非常有用。它可以将复杂的...

    Oracle查询语句大全-精华版

    查询当前用户下的所有表是使用 Oracle 的一个基本操作,使用以下语句可以查询当前用户下的所有表: select * from tab; 其中,tab 是 Oracle 中的一个系统视图,用于显示当前用户下的所有表和视图。 七、显示当前...

    多种条件查询,Adodc1,DataGrid1的应用(VB6.0源代码编写

    在VB6.0编程环境中,"多种条件查询,Adodc1,DataGrid1的应用"是一个常见的主题,涉及数据库操作和用户界面展示。这个主题涵盖了如何利用ActiveX Data Objects (ADO)组件ADODC和DataGrid控件实现复杂的查询功能,并在...

    设计哈希表实现电话号码查询系统

    哈希表是一种高效的数据结构,用于存储和检索数据,其主要特点是通过关键字(在本例中是电话号码和用户名)快速定位到数据记录。以下是对这个系统设计的详细说明: 首先,每个记录包含三个数据项:电话号码、用户名...

    C# DataGridView分页以及模糊查询实现

    模糊查询是另一种常用的功能,它允许用户输入部分关键词,系统会返回包含这些关键词的所有记录。在C#中,结合SQL数据库,可以这样实现: 1. 用户在搜索框中输入文本,程序捕获此事件。 2. 构建SQL的`LIKE`查询语句...

    ireport 子报表,行合并实例

    1. 设计子报表:首先,你需要创建一个单独的报表模板作为子报表,包含所需的数据和布局。 2. 添加子报表到主报表:在主报表的设计界面中,选择“子报表”组件,然后指定子报表的JRXML文件路径。 3. 连接数据源:子...

    C#中DataGridView主从表例子

    在实现主从表关联时,我们通常会有一个主表(如客户表)和一个或多个从表(如订单表)。主表的数据会在`DataGridView`的一个面板中显示,而从表的数据则在另一个嵌套的`DataGridView`中显示,这通常通过`...

    C#实现多条件组合查询

    在C#编程中,多条件组合查询是一种常见的需求,特别是在数据处理、数据分析或者数据库操作的场景下。这种查询允许开发者根据多个不同的标准筛选数据,从而获取满足特定条件的结果集。以下将详细介绍如何在C#中实现多...

Global site tag (gtag.js) - Google Analytics