高手请进!报表统计问题!

xiequanqin 2007-01-10 10:16:55
手头有一个报表要做,简化以后,大概模型如下:
有如下几张表:
tJJFE --记录了各个客户的每只基金的当前持有量

KHH JJZH JJDM JJSL
------------ ------------ ------ -----------------
000000000022 273600125785 270001 30002.00
000000001208 273600125730 270001 30002.00
000000002996 SQ8999999999 050001 30002.00
000009000016 050505050506 111001 2010002.00
000009000016 270000000007 270001 6800607002.00
000089500024 273600022981 270001 30002.00
001000000003 273600125796 270001 30002.00
011018000422 273600066512 270001 30002.00
011018000863 273600063659 270001 30002.00
011018001195 273600053551 270001 30002.00

tJJMXLS --历史基金变动明细
RQ KHH JJZH JJDM BDSL
---------- ------------ ------------ ------ ---------------------------------------
2005.03.24 311200000535 013600010514 111001 1011.00
2005.03.25 311200000963 273600125718 270001 10000.00
2005.10.31 311200000963 273600125718 270001 10000.00
2005.11.10 311200008620 000000000000 270001 1000000.00
2005.11.10 311200008620 000000000000 270001 20000000000.00
2005.11.10 311200008620 273200000006 270001 100000000.00
2006.05.16 311200000321 013600010569 202001 1000.00

tJJXXLS --历史基金行情
RQ JJDM JJJC JJJZ
---------- ------ ------------ ----------------
2005.03.24 202001 南方测试 1.300000
2005.03.24 202011 南方测试 1.500000
2005.03.25 202001 南方测试 1.300000
2005.03.25 202011 南方测试 1.500000
2005.10.31 202001 南方测试 1.300000
2005.10.31 202011 南方测试 1.500000
2005.11.10 202001 南方测试 1.300000
2005.11.10 202011 南方测试 1.500000
2006.05.09 202001 南方测试 1.300000
2006.05.09 202011 南方测试 1.500000

关联条件:
tJJFE.KHH=tJJMXLS.KHH AND tJJFE.JJZH=tJJMXLS.JJZH AND tJJFE.JJDM=tJJMXLS.JJDM

tJJFE.JJDM=tJJXXLS.JJDM

tJJMXLS.JJDM=tJJXXLS.JJDM

报表要求:
生成一个统计任意时间段内所有客户所持有的基金的日均持有量\日均市值,格式如下:

KHH JJZH JJDM PJCYL PJCYL
------------ ------------ ------ -------- ---------------- --------------
311200008620 273200000007 270001 广发测1 30000.000000 33000.000000
NULL 270000000007 270001 广发测1 6800607002.0 7480667702.2
311200008620 000000000000 270001 广发测1 7785267064.7 8563793771.1
311200008620 273600156543 270001 广发测1 30000.000000 33000.000000
311200008620 273600125729 270001 广发测1 30000.000000 33000.000000
311200000963 273600125718 270001 广发测1 19972.652689 21969.917958
311200008620 273200000006 270001 广发测1 38954339.106 42849773.017
311200008620 273600125741 270001 广发测1 30000.000000 33000.000000

其中,某一只基金当天的市值=当天该基金的持有量*净值(JJJZ)
日均,就是期间内每天的累计/期间天数
以上都是简化后的结果.单是统计日均持有量倒是简单,多了个日均市值,本人统计起来,虽然可以实现,但是,效率感觉不是太高.
请各位高手一起出力,群策群力,看看能不能有没有比较好的算法.

先谢谢各位了!
--通过代码实现当然好,实在不行,给个思路也可以~
再不,也得帮顶个~

提示:某一天的持有量可以根据当前的持有量 以及 历史份额变动 倒推回去
...全文
503 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiequanqin 2007-01-17
  • 打赏
  • 举报
回复
1、虽然平均持有量算起来确实可以比日均市值简单很多(1个不太复杂SQL就能搞定)。但是,最终我们还是要算日均市值的,算日均市值的方法肯定也能算出日均持有量,所以就没必要再用其他的方式算日均持有量了;
2、我之所以发这个帖子,就是希望大家能提些建设性的建议。我相信,通过数学模式的转换,一定能得出更加简便、有效的解决方案的(不好意思。。数学方面的忘得差不多了~~)

3、特别感谢 mengmou()mengmou() 以及 帮顶的朋友~
mengmou 2007-01-12
  • 打赏
  • 举报
回复
关注中
xiequanqin 2007-01-12
  • 打赏
  • 举报
回复
把它COPY到查询分析器就不会这么乱了。。。

这里显示的行宽太少了
feixiangVB 2007-01-12
  • 打赏
  • 举报
回复
幫頂哈子
mengmou 2007-01-12
  • 打赏
  • 举报
回复
脑子乱了,重来。首先求得该段时间的期末数量
1 某个时间段的基金总量=期末数量×该段时间天数+SUM(该时间段内基金变动数量×(本次变动时间与期末时间差的天数))
2 某个时间段日均持有量=该时间段基金总量/该段时间天数
3 某个时间段的总值=期末数量×(该段时间每天的单价之和)+ SUM(一次变动的数量×变动时间与期末时间这个时间段内的单价之和)
4 某个时间段的日均值= 该时间段的总值/该段时间天数
mengmou 2007-01-12
  • 打赏
  • 举报
回复
因为我们开始取的是当前持有量,而不是该段时间期末的持有量,
所以在求数量变动对总值产生的影响时要一直考虑到当前时间,
而不是考虑到该段时间的期末。
mengmou 2007-01-12
  • 打赏
  • 举报
回复
你还是不明白我的意思
当前持有量×(该段时间每天的单价之和)
----------------------
这部分是假设没有数量变动,即先不考虑数量变动,求得总值。

SUM(一次变动的数量×变动时间与当前时间这个时间段内的单价之和)
--------------------------------
这部分是求得数量变动对总值的影响,
如果有一次数量变动,这次数量变动后一天对总值产生的影响是
变动数量×当日单价×1天
那么两天后的影响就是变动数量×单价A×1天 + 变动数量×单价B×1天
所以这次变动到今天产生的总值影响就是
变动数量×(单价A+单价B+……)×1天=变动的数量×变动时间与当前时间这个时间段内的单价之和
那么该时间段内所有的数量变动产生的总值影响就是
SUM(一次变动的数量×这次变动时间与当前时间这个时间段内的单价之和)

xiequanqin 2007-01-12
  • 打赏
  • 举报
回复
当前持有量×(该段时间每天的单价之和)

该段时间 应该是最后一次变动到期末 之间的时间

还有,因为期末不一定是当前日期,又要算期末持有量

SUM(一次变动的数量×变动时间与当前时间这个时间段内的单价之和)
这个也不太对。。。

应该是 SUM(变动后的数量×变动时间与当前时间这个时间段内的单价之和)
mengmou 2007-01-12
  • 打赏
  • 举报
回复
还是不对,改为
某个时间段的总值=当前持有量×(该段时间每天的单价之和)+ SUM(一次变动的数量×变动时间与当前时间这个时间段内的单价之和)
mengmou 2007-01-12
  • 打赏
  • 举报
回复
疏忽这一点了,改为
某个时间段的总值=当前持有量×(该段时间每天的单价之和)+ SUM(一次变动的数量×当日单价×(变动时间与当前时间的时间差))
xiequanqin 2007-01-12
  • 打赏
  • 举报
回复
3 某个时间段的总值=当前持有量×(该段时间每天的单价之和)+ SUM(一次变动的数量×当日单价)

SUM(一次变动的数量×当日单价)不对
变动的数量,对变动之后的所有日期有效
mengmou 2007-01-12
  • 打赏
  • 举报
回复
这几个公式对不对,如果对的话,写语句应该不是很复杂啊。
1 某个时间段的基金总量=当前持有量×该段时间天数+SUM(该时间段内一次基金变动数量)
2 某个时间段日均持有量=该时间段基金总量/该段时间天数
3 某个时间段的总值=当前持有量×(该段时间每天的单价之和)+ SUM(一次变动的数量×当日单价)
4 某个时间段的日均值= 该时间段的总值/该段时间天数
flykye 2007-01-11
  • 打赏
  • 举报
回复
写得这么乱。。看着都没有心情啊。。
Andy-W 2007-01-10
  • 打赏
  • 举报
回复
使用存储过程来实现。
1、参数是开始日期:@StartDate 结束日期:@EndDate
2、建立一个结果表的临时表#T1。
3、把从开始日期到结束日期的所有客户信息INSERT INTO #T1 (先初始化结果表#T1)
4、按客户分类统计基金的总持有量、总市值、天数,并根据所有得的结果更新到#T1
(可以分批处理,更新到#T1)
5、UPDATE #T1 SET 日均持有量=总持有量/天数,日均市值=总市值/天数
6、DROP TABLE #T1 完成
备注:难点在于按客户分类统计基金的各个项目数据。个人认为,虽然这存储过程可能写得有点长,但对于数据量大的情况,可以采用这样的方法。速度可以比用一条统计语句中包含几个子查询,提高几时倍。


xiequanqin 2007-01-10
  • 打赏
  • 举报
回复
tJJFE :
KHH(客户号) JJZH (基金账号) JJDM(基金代码) JJSL(基金数量)

tJJMXLS
RQ(变动日期) KHH(客户号) JJZH (基金账号) JJDM(基金代码) BDSL(变动数量)

tJJXXLS
RQ(行情日期)JJDM(基金代码) JJJC(基金简称) JJJZ(基金净值--每一份基金的市值)
mengmou 2007-01-10
  • 打赏
  • 举报
回复
能不能把每列的含义介绍一下?
xiequanqin 2007-01-10
  • 打赏
  • 举报
回复
自己再DING
xiequanqin 2007-01-10
  • 打赏
  • 举报
回复
再Ding
yowbell 2007-01-10
  • 打赏
  • 举报
回复
帮顶吧,水平太差,不能帮你解决
xiequanqin 2007-01-10
  • 打赏
  • 举报
回复
路过的帮忙顶,谢谢~
加载更多回复(5)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧