-
查询子表各记录某属性和,如何写?挺麻烦的,困扰了一周。。。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个答案 按时间排序 按投票排序
-
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
-
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
-
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
-
先创建一个视图 其中记录形式为
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查询表中某字段下所有重复的记录,删除某字段下重复记录最小的那笔记录
在ArcEngine中,属性查询是GIS(地理信息系统)开发中一个关键的功能,它允许用户根据特定的条件筛选和检索地图上的图层数据。本示例着重讲解如何利用ArcEngine API来实现这一功能,并且使查询结果在地图上以闪烁、...
在这个例子中,外部查询`members`表的每个`用户号`都会与子查询中的`sell`表的`用户号`进行比较,只有当子查询在`sell`表中找到匹配的销售记录时,外部查询的当前行才会被选取。 相关子查询的应用场景广泛,例如在...
本实例提供了一个实体属性变更历史记录工具类,只要写很少的代码就能实现强大的变更历史记录功能.本工具类的主要优点是1.工具类对实体对象没有依赖性,任何对象都能记录历史.2.只要编写很少的代码就能实现需求. 3.所有...
3. **属性表查询**:ArcEngine提供了多种查询方式,如SQL查询、空间查询和定义查询。使用IQueryFilter接口可以实现基于属性的查询,比如选择满足特定条件的记录。同时,通过使用ICursor和IRow接口,你可以进一步处理...
在本文中,我们将深入探讨如何使用VS2010 C#和ArcEngine来实现属性查询以及基于位置(空间)的查询。ArcEngine是Esri公司提供的一个强大的GIS开发平台,它允许开发者创建桌面、Web以及移动GIS应用程序。通过C#语言,...
当用户选择主表中的某一记录时,对应的从表记录会在子表中显示,这样用户就可以直观地看到两个表之间的关联信息。 实现DBGridEh的主从表“表中表”显示,首先需要设置好数据源(如TClientDataSet或TDataSource)。...
在本文中,我们将深入探讨如何使用C#编程语言与ArcEngine进行交互,实现基于属性的查询功能,并将查询结果导出为新的Shapefile(shp)格式,支持批量操作。ArcEngine是由Esri公司开发的一个强大的GIS开发工具,它...
实例339 利用聚合函数First或Last求数据表中第一条或最后一条记录 496 10.11 多表查询(连接查询) 498 实例340 利用FROM子句进行多表查询 498 实例341 使用表别名 499 实例342 合并多个结果集...
<P><P>原理:在窗体启动时把需要查询的表中的所有字段名读取到一个组合框中,设定两个变量来保存查询用的SQL语句及显示给用户看的SQL语句,每点击一次添加条件,就在SQL语句中加一个条件,最后用该SQL语句做为查询...
在GIS(地理信息系统)领域,GeoServer是一款开源的、基于Java的服务器软件,它能够发布和操作地理空间数据。WFS(Web Feature Service)是OGC(Open Geospatial Consortium)制定的一种标准接口,用于在网络上交换...
2. **子查询**:通过子查询首先统计出库表中的商品总数,然后将其与入库表中的相应记录进行比较。 3. **聚合函数**:使用`SUM()`函数来汇总每个商品的入库数量和出库数量。对于出库数量,使用`ISNULL()`函数来处理...
子查询是SQL语言的另一项强大特性,允许在一个查询语句中嵌套另一个查询语句,从而实现更复杂的数据筛选和处理。 - **子查询的使用场合**:当查询依赖于另一个查询的结果时,子查询变得非常有用。它可以将复杂的...
查询当前用户下的所有表是使用 Oracle 的一个基本操作,使用以下语句可以查询当前用户下的所有表: select * from tab; 其中,tab 是 Oracle 中的一个系统视图,用于显示当前用户下的所有表和视图。 七、显示当前...
在VB6.0编程环境中,"多种条件查询,Adodc1,DataGrid1的应用"是一个常见的主题,涉及数据库操作和用户界面展示。这个主题涵盖了如何利用ActiveX Data Objects (ADO)组件ADODC和DataGrid控件实现复杂的查询功能,并在...
哈希表是一种高效的数据结构,用于存储和检索数据,其主要特点是通过关键字(在本例中是电话号码和用户名)快速定位到数据记录。以下是对这个系统设计的详细说明: 首先,每个记录包含三个数据项:电话号码、用户名...
模糊查询是另一种常用的功能,它允许用户输入部分关键词,系统会返回包含这些关键词的所有记录。在C#中,结合SQL数据库,可以这样实现: 1. 用户在搜索框中输入文本,程序捕获此事件。 2. 构建SQL的`LIKE`查询语句...
1. 设计子报表:首先,你需要创建一个单独的报表模板作为子报表,包含所需的数据和布局。 2. 添加子报表到主报表:在主报表的设计界面中,选择“子报表”组件,然后指定子报表的JRXML文件路径。 3. 连接数据源:子...
在实现主从表关联时,我们通常会有一个主表(如客户表)和一个或多个从表(如订单表)。主表的数据会在`DataGridView`的一个面板中显示,而从表的数据则在另一个嵌套的`DataGridView`中显示,这通常通过`...
在C#编程中,多条件组合查询是一种常见的需求,特别是在数据处理、数据分析或者数据库操作的场景下。这种查询允许开发者根据多个不同的标准筛选数据,从而获取满足特定条件的结果集。以下将详细介绍如何在C#中实现多...