物料代码       物料名称  价格 货币 生效日期          失效日期
58.9.5890000060 板 6.6 人民币 2009-3-26          2100-1-1
58.9.5890000040 尼龙垫圈 4.25 人民币 2009-9-28          2100-1-1
58.9.5873000018 纱架电箱 950 人民币 2007-7-30          2079-1-1
58.9.4100087487 右安装板 330 人民币 2009-10-29 2100-1-1
58.9.4100087486 左盖板一 292 人民币 2009-10-29 2100-1-1
58.9.4100087485 右盖板二 192 人民币 2009-10-29 2100-1-1
58.9.4100087452 左盖板二 192 人民币 2009-10-29 2100-1-1
58.9.4100087448 左安装板 330 人民币 2009-10-29 2100-1-1
58.9.4100087441 右盖板一 292 人民币 2009-10-29 2100-1-1
58.9.4100079196 夹纱锌合 1.4 人民币 2008-11-28 2100-1-1
58.9.4100079196 夹纱锌合 3.27 人民币 2008-11-26 2100-1-1
58.9.4100069036 U型槽组 9393.7 人民币 2010-5-26          2079-1-1
58.9.4100066949 小轴 3.9 人民币 2009-3-25          2100-1-1
58.9.4100066947 链轮 12 人民币 2011-12-23 2100-1-1
58.9.4100065127 左刀片 42.35  欧元 2008-7-1          2079-1-1
58.9.4100065125 右刀片 42.35  欧元 2008-7-1          2079-1-1
58.9.4100064262 气缸 80.05  欧元 2008-7-1          2079-1-1
58.9.4100063671 左防护壳 7.15 人民币 2008-4-18          2079-1-1
58.9.4100063671 左防护壳 14.46 人民币 2008-12-18 2100-1-1
58.9.4100063671 左防护壳 14.6 人民币 2008-8-15  2100-1-1
58.9.4100063639 右防护壳 7.15 人民币 2008-4-18          2079-1-1
58.9.4100063639 右防护壳 14.46 人民币 2008-12-18 2100-1-1
-----------------------------------------------------------------------------怎么根据以上数据 查询 生效日期是最近的并且失效日期大于2079-1-1

解决方案 »

  1.   

    SELECT * FROM TB T 
    WHERE 生效日期 in(select top 1 生效日期 from tb where 物料名称=t.物料名称 and 失效日期>'2079-1-1') and  t.失效日期>'2079-1-1'
      

  2.   

    消息 170,级别 15,状态 1,第 6 行
    Line 6: Incorrect syntax near 't'.最大疑问就是怎么查找最近的一个生效日期
      

  3.   

    SELECT * FROM TB T  
    WHERE 生效日期 in(select top 1 生效日期 from tb where 物料名称=t.物料名称 and 失效日期>'2079-1-1' order by 生效日期 desc) and t.失效日期>'2079-1-1'
      

  4.   

    呵呵,你的条件是这样的,首先是失效日期>'2079-1-1',然后最近的生效日期的一条记录。select top 1 * from tb where 失效日期>'2079-1-1' order by 生效日期 desc
      

  5.   

    不能用top 1啊  我不是查最新的1个物料 
    我要查询每个物料里面的最新价格,取值的条件是判断生效日期是最新的那一个。
      

  6.   

    select 
      物料代码,物料名称,价格
    from
      tb t
    where
      生效日期=(select max(生效日期) from tb where  物料名称=t.物料名称 and 失效日期>'2079-1-1')
      

  7.   

    where
    生效日期=(select max(生效日期) from tb where  物料名称=t.物料名)这段语句是什么意思 能解释一下吗