获得最接近的值

时间:2017-11-30 22:24:06

标签: mysql sql

我有以下数据

Docnum      ItemCode       opnum          startdate         result
73305        Wc-Trim        100          2017-08-18       2017-08-18
73305        WC-Asse        200          2017-11-29       2017-08-18
73305        Wc-id          300          2017-11-30       2017-11-29
73305        wc-qa          400          2017-12-01       2017-11-30

我需要获得结果列中显示的输出。 说明: 1.Opnum 100是第一个操作,因此日期与开始日期相同。 2.对于opnum 200,它必须得到opnum 100的开始日期 3.对于opnum 300,它可以获得opnum 200的开始日期 等等。

注意:opnum并不总是100的倍数。 在我的查询中,我得到了所有行的opnum 100的开始日期。

查询:

select t0.DocNum,t1.itemcode,t1.U_SES_OP_NUM,t1.U_SES_DATESTART
,(select top 1 a0.U_SES_DATESTART from wor1 a0 where 
t1.DocEntry = a0.DocEntry  and a0.ItemType = 290 and
a0.U_SES_OP_NUM < t1.U_SES_OP_NUM)

from OWOR t0inner join WOR1 t1 on t0.DocEntry = t1.DocEntry and t1.ItemType = 290

where t0.docnum = 73305
order by t1.U_SES_OP_NUM

1 个答案:

答案 0 :(得分:0)

这通常是使用lag完成的。由于MySQL不支持它,可以使用相关的子查询来完成。

select t.*,
coalesce((select start_date from tbl
          where docnum=t.docnum and opnum < t.opnum 
          order by opnum desc limit 1)
         ,start_date) as result
from tbl t

解决方案假设每个opnum和docnum都有一行。