前两天的时间问题解决了,现在又出现一个问题;
数据库中有很多台设备,每台设备都在表中有个对应的字段nodeaddr,而且这些设备每3秒就采集一次数据,我现在要做的是查询所有设备5分钟之内的第一条数据;(表名是relrun)
我写的sql语句是:SELECT TOP 1 *
FROM realrun
WHERE data BETWEEN getdate()-0.003472 AND getdate() ORDER BY data desc
现在问题出来了,我只能查到5分钟之内的第一条数据,而并不是我想要的5分钟内所有设备的第一条数据,
假设我有100台设备,现在我要做的是查询100台设备的5分钟内离现在最近的一条数据,也就是100条数据,我上面的查询只查询到了一条最近的数据,并没有加上每台设备这个条件,怎么加啊?我做的是B/S软件,jsp、hibernate;求大家帮忙;

解决方案 »

  1.   

    看到的朋友帮忙想象办法;
    如果没有这样的查询语句有没有可以实现这种查询结果的方法啊,见别人做的bcb里面有什么缓冲区之类的,jsp里面有什么办法吗?详细点说说啊,第一次做这种查询。大家都来帮帮忙!!谢啦
      

  2.   


    SELECT TOP 1 * 
    FROM realrun 
    WHERE data BETWEEN getdate()-0.003472 AND getdate() 
    GROUP BY nodeaddr
    ORDER BY data desc 
      

  3.   

    好像不行,我查的是视图,
    并且设备是两个字段决定的,上面只是举了个例子,
    表中fzaddr和nodeaddr两个字段确定一台设备,
    比如说 fzaddr=23 nodeaddr=3是一台设备
           fzaddr=23 nodeaddr=4是一台设备
           fzaddr=24 nodeaddr=3是一台设备
    三台设备不是同一台,
    只靠nodeaddr分组不行;
    我试了试视图中用group by好像提示错误?
      

  4.   


    SELECT TOP 1 * 
    FROM realrun 
    WHERE data BETWEEN GETDATE()-0.003472 AND GETDATE() 
    GROUP BY nodeaddr,fzaddr
    ORDER BY data DESC
      

  5.   

    不行呀,提示:
    [Microsoft][ODBC SQL Server Driver][SQL Server]列‘realrun.data’在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在GROUP BY子句中。
    怎么回事啊?
      

  6.   

    帮我看看那个错误是怎么回事?我先把sql语句在在sql server里面查询看看那结果的时候,sql server提示的上面的错误,是哪的原因?
      

  7.   

    采用分组啊,group by nodeaddr
      

  8.   

    具体应该这样写:
    SELECT max(data),* 
    FROM realrun 
    WHERE data BETWEEN GETDATE()-0.003472 AND GETDATE() 
    GROUP BY nodeaddr,fzaddr
    最大的时间就是最晚的,这样可以,我测试过了
      

  9.   

    不行啊,总是提示data不包含在聚合函数中中,也不在GROUP BY子句中,有人给我说sql写不出这样的查询结果,要用临时表,在jsp中生成临时表,只插入最新的记录,然后findall查询临时表所有数据,但是我做的jsp用的是hibernate,所有表都是影射出来的实体类,这个临时表我也不会创建,就更不会用了,怎么办啊?