表数据
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 是这一小时最后的一个价格请问怎么查

解决方案 »

  1.   

    正确结果贴出来
    贴建表及插入记录的SQL
      

  2.   

    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) 得到的结果将会是 在指定的一小时内,,“最早的一个价格” 在本组中最高的价格值,
      

  3.   


    最早的价格不是最高的价格 这个应该按照StartTime 进行筛选,StartTime 最小为最早
    反之 最大为LastPrx请问如何查询?
      

  4.   

    参考下贴中的多种方法http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
    [征集]分组取最大N条记录方法征集,及散分....
      

  5.   

    没看懂。   建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式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)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。