mysql5资源共享

 找回密码
 立即注册
查看: 196|回复: 15

[MySQL] 求代码,谢谢

[复制链接]

19

主题

114

帖子

257

积分

中级会员

Rank: 3Rank: 3

积分
257
发表于 2019-7-8 11:38:06 | 显示全部楼层 |阅读模式
请求以下代码:

假设我有一个数据库,里面有以下数据

CREATETABLEIFNOTEXISTS`tb_shareinfo`(
`fd_Code`varchar(10)NOTNULLCOMMENT'股票代码',
`fd_Name`varchar(20)CHARACTERSETutf8NOTNULLCOMMENT'股票名称',
`fd_OpeningPrice`floatNOTNULLCOMMENT'开盘价',
`fd_ClosingPrice`floatNOTNULLCOMMENT'收盘价',
`fd_NowPrice`floatNOTNULLCOMMENT'当前价格',
`fd_HighPrice`floatNOTNULLCOMMENT'最高价',
`fd_LowPrice`floatNOTNULLCOMMENT'最低价',
`fd_UpdateDate`varchar(10)NOTNULLCOMMENT'获取日期',
PRIMARYKEY(`fd_Code`,`fd_UpdateDate`)
)ENGINE=MyISAMDEFAULTCHARSET=latin1;

求以下代码:
我如何根据一定的时间内(假设100天),计算每一只股票的“当前价格”与指定日期内(即前面提到的100天)的平均“当前价格”的比值最高的前10只股票呢?

请根据我的表写出代码,谢谢各位~~~
回复

使用道具 举报

1

主题

20

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2019-7-8 12:14:05 | 显示全部楼层
根据日期排序然后查询出前一百,然后根据股票价格排序查询出前10就行了
回复

使用道具 举报

19

主题

114

帖子

257

积分

中级会员

Rank: 3Rank: 3

积分
257
 楼主| 发表于 2019-7-8 13:46:56 | 显示全部楼层
估计还没有明白我意思了,我意思是首先要按照每一个股票来计算它的平均当前价格,然后再用“当前价格”除以求出的平均当前价格,然后再按照这个值,谁最高的,排在第一位,然后再找出前10位,分开的代码我会写,但希望找到更简便更高效的代码,谢谢!
回复

使用道具 举报

19

主题

114

帖子

257

积分

中级会员

Rank: 3Rank: 3

积分
257
 楼主| 发表于 2019-7-8 13:47:39 | 显示全部楼层
引用1楼心怀啊的回复:根据日期排序然后查询出前一百,然后根据股票价格排序查询出前10就行了

估计还没有明白我意思了,我意思是首先要按照每一个股票来计算它的平均当前价格,然后再用“当前价格”除以求出的平均当前价格,然后再按照这个值,谁最高的,排在第一位,然后再找出前10位,分开的代码我会写,但希望找到更简便更高效的代码,谢谢!
回复

使用道具 举报

0

主题

7

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2019-7-9 11:27:08 | 显示全部楼层
select
t.fd_Code,t.fd_Name,t.fd_NowPrice,
t1.avg_price,t.fd_NowPrice/t1.avg_pricee_value
(selectt.*
from
(selectfd_Code,fd_Name,fd_NowPrice,
row_number()over(partitionbyfd_Codeorderbyfd_UpdateDatedesc)rn
fromtb_shareinfo
wherefd_UpdateDatebetween'起始时间'and'结束时间'
)t
wheret.rn=1
)t-------当前价格
leftjoin
(
selectfd_Code,fd_Name,
sum(fd_NowPrice)/count(1)avg_price--平均价格
fromtb_shareinfo
wherefd_UpdateDatebetween'起始时间'and'结束时间'
groupbyfd_Code,fd_Name
)t1
ont.fd_Code=t1.fd_Code
orderbyt.fd_NowPrice/t1.avg_pricedesclimit10;

逻辑是t表获取最新的股票价格,t1获取统计平均值,然后关联计算
回复

使用道具 举报

19

主题

114

帖子

257

积分

中级会员

Rank: 3Rank: 3

积分
257
 楼主| 发表于 2019-7-10 08:44:53 | 显示全部楼层
引用4楼Edmond1023的回复:select
t.fd_Code,t.fd_Name,t.fd_NowPrice,
t1.avg_price,t.fd_NowPrice/t1.avg_pricee_value
(selectt.*
from
(selectfd_Code,fd_Name,fd_NowPrice,
row_number()over(partitionbyfd_Codeorderbyfd_UpdateDatedesc)rn
fromtb_shareinfo
wherefd_UpdateDatebetween'起始时间'and'结束时间'
)t
wheret.rn=1
)t-------当前价格
leftjoin
(
selectfd_Code,fd_Name,
sum(fd_NowPrice)/count(1)avg_price--平均价格
fromtb_shareinfo
wherefd_UpdateDatebetween'起始时间'and'结束时间'
groupbyfd_Code,fd_Name
)t1
ont.fd_Code=t1.fd_Code
orderbyt.fd_NowPrice/t1.avg_pricedesclimit10;

逻辑是t表获取最新的股票价格,t1获取统计平均值,然后关联计算

非常感谢你的回复,但我运行发现抱错,错误如下:
#1064-YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'(selectt.*from(selectfd_Code,fd_Name,fd_NowPrice,row_number()over(par'atline4

请问是什么问题导致呢,谢谢~
回复

使用道具 举报

0

主题

7

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2019-7-10 09:53:04 | 显示全部楼层
引用5楼penguinhzf的回复:Quote: 引用4楼Edmond1023的回复:
select
t.fd_Code,t.fd_Name,t.fd_NowPrice,
t1.avg_price,t.fd_NowPrice/t1.avg_pricee_value
(selectt.*
from
(selectfd_Code,fd_Name,fd_NowPrice,
row_number()over(partitionbyfd_Codeorderbyfd_UpdateDatedesc)rn
fromtb_shareinfo
wherefd_UpdateDatebetween'起始时间'and'结束时间'
)t
wheret.rn=1
)t-------当前价格
leftjoin
(
selectfd_Code,fd_Name,
sum(fd_NowPrice)/count(1)avg_price--平均价格
fromtb_shareinfo
wherefd_UpdateDatebetween'起始时间'and'结束时间'
groupbyfd_Code,fd_Name
)t1
ont.fd_Code=t1.fd_Code
orderbyt.fd_NowPrice/t1.avg_pricedesclimit10;

逻辑是t表获取最新的股票价格,t1获取统计平均值,然后关联计算

非常感谢你的回复,但我运行发现抱错,错误如下:
#1064-YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'(selectt.*from(selectfd_Code,fd_Name,fd_NowPrice,row_number()over(par'atline4

请问是什么问题导致呢,谢谢~

第四行少了一个from抱歉啊
回复

使用道具 举报

19

主题

114

帖子

257

积分

中级会员

Rank: 3Rank: 3

积分
257
 楼主| 发表于 2019-7-10 11:39:12 | 显示全部楼层
引用6楼Edmond1023的回复:Quote: 引用5楼penguinhzf的回复:
Quote: 引用4楼Edmond1023的回复:
select
t.fd_Code,t.fd_Name,t.fd_NowPrice,
t1.avg_price,t.fd_NowPrice/t1.avg_pricee_value
(selectt.*
from
(selectfd_Code,fd_Name,fd_NowPrice,
row_number()over(partitionbyfd_Codeorderbyfd_UpdateDatedesc)rn
fromtb_shareinfo
wherefd_UpdateDatebetween'起始时间'and'结束时间'
)t
wheret.rn=1
)t-------当前价格
leftjoin
(
selectfd_Code,fd_Name,
sum(fd_NowPrice)/count(1)avg_price--平均价格
fromtb_shareinfo
wherefd_UpdateDatebetween'起始时间'and'结束时间'
groupbyfd_Code,fd_Name
)t1
ont.fd_Code=t1.fd_Code
orderbyt.fd_NowPrice/t1.avg_pricedesclimit10;

逻辑是t表获取最新的股票价格,t1获取统计平均值,然后关联计算

非常感谢你的回复,但我运行发现抱错,错误如下:
#1064-YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'(selectt.*from(selectfd_Code,fd_Name,fd_NowPrice,row_number()over(par'atline4

请问是什么问题导致呢,谢谢~

第四行少了一个from抱歉啊

再次感谢你的回复,这次我加了from之后,还是会报错,错误如下:
#1064-YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'(partitionbyfd_Codeorderbyfd_UpdateDatedesc)rnfromtb_shareinfowhere'atline7

请麻烦再帮忙看看,谢谢~~~
回复

使用道具 举报

0

主题

7

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2019-7-10 14:06:44 | 显示全部楼层
select
t.fd_Code,t.fd_Name,t.fd_NowPrice,
t1.avg_price,t.fd_NowPrice/t1.avg_pricee_value
from
(select
fd_Code,
fd_Name,
fd_NowPrice
from
(select
fd_Code,
fd_Name,
fd_NowPrice
fromtb_shareinfo
wherefd_UpdateDatebetween'起始时间'and'结束时间'
orderbyfd_UpdateDatedesc)t
groupby
fd_Code,fd_Name)t
leftjoin
(select
fd_Code,
fd_Name,
sum(fd_NowPrice)/count(1)avg_price
fromtb_shareinfo
wherefd_UpdateDatebetween'起始时间'and'结束时间'
groupbyfd_Code,fd_Name
)t1
ont.fd_Code=t1.fd_Code
orderbyt.fd_NowPrice/t1.avg_pricedesclimit10;
回复

使用道具 举报

0

主题

7

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2019-7-10 14:07:03 | 显示全部楼层
原因是mysql没有开窗函数
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|mysql5.com Inc. ( 闽ICP备17002856号-1 )

GMT+8, 2019-12-7 02:34 , Processed in 0.051394 second(s), 18 queries .

Powered by MySQL5.com X3.4

© 2003-2019 MySQL5.com.

快速回复 返回顶部 返回列表