要取出那price 的生成日期,而只有這個price和上個 pricelist version的 price相差多於0.01 元才取出來。
首先假設一個產品有4個價格版本
select pp.pricestd from m_product p
inner join m_productprice pp on(pp.m_product_id=p.m_product_id)
inner join m_pricelist pl on(pl.m_pricelist_id=pp.m_pricelist_id)
where pl.name='Purchase' and p.m_product_id=1027371 
order by pp.created
假設結果有5行
0.5
0.49
0.51
0.75
0.88
但是,不需要返回5行,需要返回0.75和0.88,因爲他們滿足與第一個結果相減大于0.01:abs(0.75-0.5)>0.01,(0.88-0.5)>0.01
而0.49无须返回,abs(0.49-0.5)=0.01
谁能帮我完成這句sql,使它能做到第一個結果與後面的結果作比較,並只返回滿足條件的sql.
非常感謝!

解决方案 »

  1.   

    如果不在意效率的话:
    SELECT pricestd,
           (SELECT pricestd
              FROM (SELECT   pp.pricestd, ROWNUM rn
                        FROM m_product p INNER JOIN m_productprice pp
                             ON (pp.m_product_id = p.m_product_id)
                             INNER JOIN m_pricelist pl
                             ON (pl.m_pricelist_id = pp.m_pricelist_id)
                       WHERE pl.NAME = 'Purchase ' AND p.m_product_id = 1027371
                    ORDER BY pp.created) tb_1
             WHERE rn = 1) firstprice
      FROM (SELECT   pp.pricestd
                FROM m_product p INNER JOIN m_productprice pp
                     ON (pp.m_product_id = p.m_product_id)
                     INNER JOIN m_pricelist pl
                     ON (pl.m_pricelist_id = pp.m_pricelist_id)
               WHERE pl.NAME = 'Purchase ' AND p.m_product_id = 1027371
            ORDER BY pp.created) tb_2
    where abs(pricestd -firstprice) >0.01 
      

  2.   

    fenixshadow,非常感謝!
    非常感謝你在短短時間幫我想出答案。