急求 股票sql

nianzhang747 2010-12-14 09:18:46
表数据
SELECT * FROM AikidoFxTick_T WHERE Symbol="CAD_JPY"; 
Symbol StartTime OpenPrx HighPrx LowPrx LastPrx
CAD_JPY 1.29059e+012 81.4275 81.45 81.39 81.4325
CAD_JPY 1.29059e+012 81.4375 81.46 81.405 81.4375
CAD_JPY 1.29059e+012 81.4375 81.455 81.395 81.4325
CAD_JPY 1.29059e+012 81.425 81.46 81.41 81.4275
CAD_JPY 1.29059e+012 81.4225 81.455 81.405 81.4275
CAD_JPY 1.29059e+012 81.4275 81.445 81.385 81.4075
CAD_JPY 1.29059e+012 81.4025 81.45 81.38 81.4325
CAD_JPY 1.29059e+012 81.4275 81.445 81.395 81.4225
CAD_JPY 1.29059e+012 81.4125 81.43 81.335 81.3525
CAD_JPY 1.29059e+012 81.388 81.411 81.35 81.373
CAD_JPY 1.29059e+012 81.388 81.411 81.35 81.37
CAD_JPY 1.29062e+012 82.578 82.61 82.55 82.5825
CAD_JPY 1.29062e+012 82.5725 82.595 82.53 82.563
CAD_JPY 1.29062e+012 82.5525 82.59 82.52 82.5675
CAD_JPY 1.29062e+012 82.5455 82.571 82.515 82.54
CAD_JPY 1.29062e+012 82.438 82.461 82.375 82.4325
CAD_JPY 1.29062e+012 82.4325 82.47 82.385 82.4425
CAD_JPY 1.29062e+012 82.4275 82.485 82.405 82.4625


我的sql语句是
SELECT Symbol,FROM_UNIXTIME(StartTime/1000,'%Y%m%d-%H') AS StartTime,OpenPrx,MAX(HighPrx),MIN(LowPrx),LastPrx FROM AikidoFxTick_t WHERE Symbol='CAD_JPY'  GROUP BY StartTime;

得出结果类似
Symbol StartTime OpenPrx MAX(HighPrx) MIN(LowPrx) LastPrx
CAD_JPY 20101124-18 81.4275 81.651 81.33 81.4325
CAD_JPY 20101124-21 81.6025 82.196 81.565 81.593
CAD_JPY 20101124-23 82.1625 82.586 81.985 82.233
CAD_JPY 20101125-02 82.5425 82.661 82.375 82.5575
CAD_JPY 20101125-05 82.548 82.761 82.49 82.5725
CAD_JPY 20101125-08 82.668 82.776 82.485 82.668
CAD_JPY 20101125-10 82.56 82.746 82.44 82.563
CAD_JPY 20101125-13 82.6175 82.776 82.59 82.628
CAD_JPY 20101125-16 82.738 82.803 82.582 82.7125
CAD_JPY 20101125-19 82.761 82.848 82.607 82.7725
CAD_JPY 20101125-21 82.76 82.83 82.636 82.7575

但是openprx 和lastprx 不对
应该openprx是这一小时最早的一个价格
lastprx 是这一小时最后的一个价格

请问怎么查
...全文
182 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangqiang_lenovo 2010-12-14
  • 打赏
  • 举报
回复
SELECT Symbol,FROM_UNIXTIME(StartTime/1000,'%Y%m%d-%H') AS StartTime,OpenPrx,MAX(HighPrx),MIN(LowPrx),LastPrx FROM AikidoFxTick_t WHERE Symbol='CAD_JPY' GROUP BY StartTime;
执行这条SQL语句会有语法错误,因为在带有Group By 的子句中,
语句格式:select '需要查询的内容' from table_name where <condition> group by column_name;

1.'需要查询的内容' 只能是使用聚合函数 或者 是 group by 后面的条件字段(eg。StartTime),因为使用group by 之后,就选择性的把多条记录聚合成一条了,你上面所提到的
“但是openprx 和lastprx 不对” 就是因为这个条件指定不明确,因为在多条记录聚合当中,你没有准确的给 它 一个 条件 ,所以就会有语法错误

SQL范例:

SELECT Symbol,FROM_UNIXTIME(StartTime/1000,'%Y%m%d-%H') AS StartTime,MAX(OpenPrx),MAX(HighPrx),MIN(LowPrx),MAX(LastPrx) FROM AikidoFxTick_t WHERE Symbol='CAD_JPY' GROUP BY StartTime;
语句解析:对按照group by语句聚合之后的记录进行有条件性的筛选,
MAX(OpenPrx) 得到的结果将会是 在指定的一小时内,,“最早的一个价格” 在本组中最高的价格值,




wwwwb 2010-12-14
  • 打赏
  • 举报
回复
正确结果贴出来
贴建表及插入记录的SQL
ACMAIN_CHM 2010-12-14
  • 打赏
  • 举报
回复
没看懂。

建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

王向飞 2010-12-14
  • 打赏
  • 举报
回复
高开低收算起来确实很麻烦。
问题还有要是在这一分钟的起点没有价格,你是取上一次的收盘价还是这一区间的第一笔交易作为开盘价,????
ACMAIN_CHM 2010-12-14
  • 打赏
  • 举报
回复
参考下贴中的多种方法

http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
[征集]分组取最大N条记录方法征集,及散分....
wangqiang_lenovo 2010-12-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 nianzhang747 的回复:]
但是openprx 和lastprx 不对
应该openprx是这一小时最早的一个价格
lastprx 是这一小时最后的一个价格
[/Quote]
[Quote=引用楼主 steve_wrong 的回复:]
最早的价格不是最高的价格 这个应该按照StartTime 进行筛选,StartTime 最小为最早
反之 最大为LastPrx
[/Quote]
楼主最好比较下,个人是觉得还没理解到你的意思,你的需求到底是怎样的?

nianzhang747 2010-12-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wangqiang_lenovo 的回复:]
MAX(OpenPrx) 得到的结果将会是 在指定的一小时内,,“最早的一个价格” 在本组中最高的价格值,
[/Quote]

最早的价格不是最高的价格 这个应该按照StartTime 进行筛选,StartTime 最小为最早
反之 最大为LastPrx

请问如何查询?

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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