现在数据是这个样子的select * from surface where TIMESTAMP>'2009-10-16 00:01:01' and TIMESTAMP<'2009-10-16 23:59:59' and nodeid=3 and id%10=0这个是我原来SQL语句,现在因为ID列无规则了所以这种SQL语句查不出东西来。ID列是自增主键
我想问一下这个改怎么查询啊?因为还要做筛选,我是想在MySQL这端做,不知道怎么做号,因为数据量会在几千条,还要考虑效率,还要考虑一下移植问题。。大侠们半磅忙了

解决方案 »

  1.   

    你想要查什么呢?没太看明白呢。
    在查询语句最后加入,order by di 这样id就有规则了
    如果是用的多的查询的话,可以给TIMESTAMP这列做成序列,这样的话可以提高查询的效率。
      

  2.   

    好像你弄错了,我观察了下你的ID都是奇数的,也就是说id%10=0肯定都不会成立,肯定没有数据呀。
      

  3.   

    时间的比较最好使用between  date1  and date2
    方式
      

  4.   

    先排序啊  如果是Oracle数据库的话 
    还可以用隐藏列 rowno 
      

  5.   

    不就想查出数据吗
    id%10=0  改成 id%10=1
    保证你可以查出来
      

  6.   


    现在数据是这个样子的 select * from surface where TIMESTAMP>'2009-10-16 00:01:01' and TIMESTAMP <'2009-10-16 23:59:59' and nodeid=3 and id%10=0 这个是我原来SQL语句,现在因为ID列无规则了所以这种SQL语句查不出东西来。 ID列是自增主键 and id%10=0是要查询所有事10 的整倍数的 id好么??要是想得到你截图的效果,可以改成and id%10>0或and id%10<>0 日期就象3楼说的那样…… 这样会有如图的数据
      

  7.   

    没明白楼主的意思。什么叫id列不规则了?我感觉 不管规则与否对你这个sql语句没啥影响吧?你可以说说你们表的结构然后 再说说要查什么样的数据 这样大家就能给你好好参谋参谋 给你写个sql语句了
      

  8.   

    ID列都自增了怎么还说“无规则”?
    查不出数据是因为没有满足条件的数据!
    你是想问怎么写sql性能好,还是想问怎么查询有数据?
      

  9.   

    你时间 别先查>再查<  效率低
    用between and
      

  10.   

    我说ID列无规则是因为,还有一个列nodeid的列,
    我要用nodeid=3的查询同意时间还会有nodeid=1,nodeid=2  等等所以ID列相对于nodeid=3就是无规则的啦查询条件
    nodeid,TIMESTAMP>'2009-10-16 00:01:01' and TIMESTAMP <'2009-10-16 23:59:59'这样的话能查出一天数据我要在查出之后的基础上做一个筛选每隔10条拿一个数据
      

  11.   

    每隔10条拿一个数据这种要求还真是很少见,Oracle可以用ROWNUM筛选,MySQL可能就不行了。
    如果确定数据只有几千条,那还用不着考虑查询优化。
    不过也可以说一下你这几个条件的优化。在nodeid上建索引;TIMESTAMP用>、<做检索,不要用between and;id%10=0这个最麻烦,用“id%10”做条件时不使用索引,会影响效率,而且还没有可以替换的写法。
      

  12.   

    select * from (SELECT * ,@rownum := @rownum +1 AS rownum FROM icealarm where TIMESTAMP>? and TIMESTAMP<? and nodeid=? ) t where t.rownum % ? = 0  ORDER BY t.id
    我是这么写的;