首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS Access:查询两个记录的差异,人为地创建第三个记录

MS Access:查询两个记录的差异,人为地创建第三个记录
EN

Stack Overflow用户
提问于 2018-07-07 18:18:19
回答 1查看 86关注 0票数 0

这是为了跟踪市场头寸。原始数据从代理提供的.csv文件中提取。每一行都是记录。当交叉交易发生时,我的问题就会起作用。例如。持有1000股,一次卖出2,000股,并持有空头头寸。我有两份原始数据的记录,1,000股的买入和2,000股的卖出。但一个新的头寸已经建立--空头1000股。也就是说,3种头寸变动,1,000股开盘,1,000股收盘价,1,000股开盘。

我需要一个查询,来确认有1000股被买入,这就是多头/买入头寸,但随后认识到,如果卖出超过1000股的股票,就会结束多头头寸,利用差额,人为地创造一个新的空头头寸,即使没有这方面的记录。

所有这些记录都属于事务表。这里是导入.csv文件的地方。

我的查询使用事务表中的四列对开始和结束金额进行分组:日期、时间、符号、购买/出售。然后,它对每个组的数量字段进行求和。

我只知道如何查询原始数据,因此我只获得上述场景的一行信息。但新职位需要第二行信息。

所以,不是这样的:

代码语言:javascript
复制
symbol | qty opened | qty closed

xyz    |    1000    |     2000

我需要这个:

代码语言:javascript
复制
symbol | qty opened | qty closed

xyz    |   1000     |     1000

xyz    |  -1000     |    Null

如有任何指导,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-09 08:15:04

假设ID是本例中交易的顺序,我使用了一个运行和:

获取此结果的查询是

SELECT T.ID, T.TradeSize, (SELECT SUM(TradeSize) From tblTrades TS WHERE TS.ID <= T.ID) AS [Position], IIf(Sgn([TradeSize])*Sgn([Position])<0,-[TradeSize],IIf(Abs([TradeSize])>Abs([Position]),[TradeSize]-[Position],0)) AS Closed, IIf([TradeSize]=-[Closed],0,[TradeSize]-[Closed]) AS [Open] FROM tblTrades AS T;

逻辑是,如果交易的标志与头寸相反,那么交易就关闭了头寸的交易规模,否则,如果交易的股票数量大于头寸规模,那么我们就关闭了先前的头寸,即交易规模减去当前头寸。你可能需要使用负号和绝对值来得到你想要的报告,但是基础应该给你正确的数字。

编辑: PS -一个更好的名称开放领域将是‘打开’。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51225843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档