表结构:
  客户编码, 商品编码,销售数量,销售金额,销售日期希望查询每个客户,商品的最后一个销售日期的销售数量和销售金额的合计,
每个客户,商品的最后的销日期会不一样,因为客户也许在当天有销售,也许没有销售.如果没有销售就取最后一次的销售情况请问这个sql查询怎么做?

解决方案 »

  1.   

    select *
    from tablename a
    where not exists(select 1 from tablename where a. 客户编码 =  客户编码 and 商品编码 = a.商品编码 and 销售日期> a.销售日期)
      

  2.   

    楼主的问题其实很简单,但是没有做过的话可能就难想出来了,我曾经为了一个类似的问题写了一天的SQL,最后被我写出来了,现在拿出来分享一下~~~
     select     商品编码,sum(销售数量),(销售金额) from table a where a.销售日期 in (
    select max(b.销售日期) from table b where a.客户编码=b.客户编码 
    ) group by 商品编码
      

  3.   

     --客户编码,   商品编码,销售数量,销售金额,销售日期 
      
       
     select
       a.客户编码,a.商品编码,a.销售数量,a.销售金额,a.销售日期 
     from 
       T a
      inner  join
     (select 客户编码,商品编码,max(销售日期) as 销售日期 from T group by 客户编码,商品编码) b
      on a.客户编码 =b.客户编码  and a.商品编码 =b.商品编码
    ----------------------或select 
    a.客户编码,a.商品编码,a.销售数量,a.销售金额,a.销售日期 
    from
    T a
    where 
    销售日期 =(select top 1 销售日期 
    from T 
    where 客户编码=a.客户编码 and 商品编码=a.商品编码 order by 销售日期 desc)
      
      

  4.   

    二楼的思路是对的
    不过如果虽然是同一天 但是不是同一个时间 那么二楼的代码只算出了最后一个时间的销售数和销售金额我改了下二楼的代码
    SELECT [客户编码],CONVERT(VARCHAR(10),[销售日期],111) AS [销售日期],SUM([销售数量]) AS [销售数量],SUM([销售金额]) AS [销售金额]
    FROM 
    table a
    JOIN (SELECT [客户编码],CONVERT(VARCHAR(10),MAX([销售日期]),111) AS [销售日期] FROM table GROUP BY [客户编码]) b
    ON a.[客户编码]=b.[客户编码] AND a.CONVERT(VARCHAR(10),[销售日期],111)=b.[销售日期]
    GROUP BY [客户编码]