SELECT DISTINCT 物品,
          (SELECT MAX(报价)
         FROM [TABLE]
         WHERE 物品 = a.物品) 历史最高,
          (SELECT MIN(报价)
         FROM [TABLE]
         WHERE 物品 = a.物品) 历史最低,
          (SELECT TOP 1 报价
         FROM [TABLE]
         WHERE 物品 = a.物品
         ORDER BY 时间 DESC) 最新,
          (SELECT TOP 1 c.报价
         FROM [TABLE] b, [TABLE] c
         WHERE b.物品 = a.物品 AND c.物品 = a.物品 AND b.时间 <> c.时间
         ORDER BY b.时间 DESC, c.时间 DESC) 上一次
FROM [TABLE] a用这种方式当某种物品只有一条记录时,“上一次”显示为NULL,不知能否满足您的要求

解决方案 »

  1.   

    Select T1.物品,T2.历史最高,T2.历史最低,T3.最新,T4.上次 From
    (Select DISTINCT 物品 From SrcT) T1
    inner join 
    (Select 物品, Max(报价)  历史最高,Min(报价)  历史最低  From SrcT Group By 物品) T2
    on T1.物品 = T2.物品
    inner join
    (Select 物品, 报价 最新 From SrcT S 
        Inner Join (Select 物品,Max(时间) 时间 From SrcT) T 
        On S.物品 = T.物品 And S.时间=T.时间) T3
    On T1.物品 = T3.物品
    Left Join 
    (Select 物品, 报价 上次 From SrcT S
        Inner Join (Select 物品,Max(时间) 时间 From SrcT A 
                    inner join (Select 物品,Max(时间) 时间 From SrcT) B
                    On A.物品 = B.物品 
                    Where A.时间<>B.时间 ) T 
        On S.物品 = T.物品 And S.时间=T.时间) T4
    On T1.物品 = T4.物品
      

  2.   

    select 物品,max(报价),min(报价),(select top 1 报价 from 表 where 物品=tem.物品 order by 时间 desc) 最新,
    (select top 1 报价  from (select top 2 时间,报价 from 表 where 物品=tem.物品 order by 时间 desc) aa order by 时间) 上一次
    from 表 tem group by 物品
      

  3.   

    创建一个视图,做一个自己表和自己表的关联
    select *
    from T a
    where t.datefield = (select max(datefield) from t where a.id = id)
    datefield 为时间列
      

  4.   

    create view ttt
    as 
      select 物品,min(报价) as 历史最低,max(报价) as 历史最高,max(时间) as 上次报价
       from 表 
       group by 物品
      

  5.   

    错了。还以为是时间

    create view ttt
    as 
      select 物品,min(报价) as 历史最低,max(报价) as 历史最高,
      (select top 1  报价 from 表 b where b.物品=表.物品 order by 时间 desc
       ) as 上次报价
       from 表 
       group by 物品
      

  6.   

    还是错,少了上一次?
    create view ttt
    as 
      select 物品,min(报价) as 历史最低,max(报价) as 历史最高,
      (select top 1  报价 from 表 b where b.物品=表.物品 order by 时间 desc
       ) as 最新报价,
      (select max(报价) from 表 b where(select count(*) from 表 b2 where  b2.时间>b.时间 )=1   ) as 上次报价,
       from 表 
       group by 物品
      

  7.   

    Select T1.物品,T2.历史最高,T2.历史最低,T3.最新,T4.上次 From
    (Select DISTINCT 物品 From SrcT) T1
    inner join 
    (Select 物品, Max(报价)  历史最高,Min(报价)  历史最低  From SrcT Group By 物品) T2
    on T1.物品 = T2.物品
    inner join
    (Select 物品, 报价 最新 From SrcT S 
        Inner Join (Select 物品,Max(时间) 时间 From SrcT) T 
        On S.物品 = T.物品 And S.时间=T.时间) T3
    On T1.物品 = T3.物品
    Left Join 
    (Select 物品, 报价 上次 From SrcT S
        Inner Join (Select 物品,Max(时间) 时间 From SrcT A 
                    inner join (Select 物品,Max(时间) 时间 From SrcT) B
                    On A.物品 = B.物品 
                    Where A.时间<>B.时间 ) T 
        On S.物品 = T.物品 And S.时间=T.时间) T4
    On T1.物品 = T4.物品
      

  8.   

    pengdali(大力 V2.0) :怎么了,把红星分给谁了?
      

  9.   

    pengdali(大力 V2.0)的的答案是最佳方案!!!