我有一张SumTab表,有(ID,PValue,Description,DTime)四个字段,但是里边记录很多重复,我想写成先把记录按时间排序,然后取DTime最新并且是最先遇到的那条记录。就是说ID有很多相同,但是我只需要最新的。

解决方案 »

  1.   

    select
      *
    from
      tb t
    where
      DTime=(select max(DTime) from tb where id=t.id)
      

  2.   

    --如果DTIME不是DATETIME类型比较时要转型
    SELECT * FROM SUMTAB T1 
    WHERE NOT EXISTS(SELECT 1 FROM SUBTAB T2 WHERE T2.ID=T1 AND T2.DTIME>T1.DTIME)
    ORDER BY DTIME ASC
      

  3.   

    --如果DTIME不是DATETIME类型比较时要转型
    --上面写错了,请无视
    SELECT * FROM SUMTAB T1 
    WHERE NOT EXISTS(SELECT 1 FROM SUBTAB T2 WHERE T2.ID=T1.ID AND T2.DTIME>T1.DTIME)
    ORDER BY DTIME ASC
      

  4.   

    select * from SubTab s where not exists ( select 1 from subtab where s.ID = ID and s.Dtime< Dtime)
      

  5.   

    select  * from SumTab where
      DTime=(select max(DTime) from SumTab where id=SumTab .id)
      

  6.   


    Create procedure Step1Trans as
    begin
     insert into SumTab select PointID,PVValue,Description,Convert(varchar(20),getdate(),120) from AnalogPoint 
    end
    Go代码就是我的存储过程,我是需要不停的从AnalogPoint这张表中取数据的,我现在想每次都取同一条记录中的最新的记录,
      

  7.   

    可能问题说的不是很清楚,我的AnalogPoint这张表是不停的从别的数据库进行数据转换而来的(从EBI数据转换而来),但是这张表没有时间字段,所以我转换后,就取其中的三个字段,然后自己加上日期插入到SumTab,怎么才能取到AnalogPoint最新更新的数据呢?
      

  8.   

    这个你自己定义时间不算啊。 AnalogPoint 里有时间吗? 有自增ID吗?找个最新的
      

  9.   

    没有时间用ID只能用ID判断了。每组内容ID最后面的为最新。
      

  10.   


    SELECT * FROM SUMTAB T1 
    WHERE NOT EXISTS(SELECT 1 FROM SUBTAB T2 WHERE T2.ID=T1 AND T2.DTIME>T1.DTIME)如果每次仅仅取一条记录的话,使用游标