注册 登录
编程论坛 SQL Server论坛

求助关于SQL语句的实现

sky_yang_sky 发布于 2010-03-11 09:18, 799 次点击
有发下的表,我要实现的是取每一种fitemid的最近时间的记录,如705取705 2010 2 364.9 0.68这条记录,而741则取741 2010 1 4421 10.69 这条记录,请问如何实现?
fitemid    fyear    fperiod    fbegqty          fbegbal
705    2008         6         45047.0000000000    208545.00
705    2008         7         3749.0000000000     15384.81
705    2008         8         2451.0000000000     3.03
705    2008         9         1880.5000000000    71.85
705    2008        10         3009.5000000000    36.56
705    2009        9         1674.0000000000    2.99
705    2009        11        2645.0000000000    4.46
705    2009        12        2609.0000000000    5.01
705    2010        1         4126.0000000000    9.23
705    2010         2        364.9000000000    0.68
741    2008        6         2408.9100000000    3.02
741    2008        7         3490.0000000000    22.71
741    2008        8          4094.0000000000    2.08
741    2008        9          2553.0000000000    3.79
741    2008        10         4603.0000000000    1.44
741    2008        11         13417.0000000000    10.69
741    2008        12         15892.0000000000    27.69
741    2009        1          39519.0000000000    47.69
741    2009        3          21589.0000000000    12.77
741    2009        4          19399.0000000000    15.75
741    2009        5          5196.0000000000    6.12
741    2009        7          5035.5000000000    8.10
741    2009        8          2632.5000000000    3.48
741    2009        9          4981.5000000000    9.76
741    2009        11         2175.0000000000    4.18
741    2009        12         3886.0000000000    9.33
741    2010        1          4421.0000000000    10.69
3 回复
#2
cnfarer2010-03-11 14:38
设xx是你的表名.
select xx.* from xx ,
    (select a.fitemid,a.fyear,max(b.fperiod) fperiod from
        (select fitemid,max(fyear) fyear from xx group by fitemid) a
            left outer join xx b on a.fitemid=b.fitemid and a.fyear=b.fyear
    group by a.fitemid,a.fyear) c
where xx.fitemid=c.fitemid and xx.fyear=c.fyear and xx.fperiod=c.fperiod
#3
sky_yang_sky2010-03-12 17:09
不好意思,上面的还是不行,虽然它能做到只查出最近一期的数据,但是假设最大的fyear,最大的fperiod里仍有相同的fitemid,只是最后两们栏位不同而己,这样又是出来了多笔记录
#4
rock108222010-03-16 15:14
不知道这样行不行
use a
go
select distinct fitemid,fyear=max(fyear),fperiod=max(period),fbegqty,fbegbal
from b
go


  补充:这里的a 表示的是数据库的名称
        b表示的是这个表的名称
1