表 flow:
flow_name   seq_num     ckey
  abc          1      poi1122
  abc          2      icr1001
  abc          3      efw5601
  abc          4      poi1122
  ere          1      mkl1111
  ere          2      ooo1222
  ere          3      ooo1222
  ere          4      icr1001
  ere          5      ooo1222
  ere          6      icr1001
  ere          7      mkl1111
  ere          8      ooo1222
  cse          1      pff9878
  cse          2      poi1122
  cse          3      pwe0087
  cse          4      pff9878
  ...         ...       ...
  
  
表 tdata:
flow_name   dname   akey   bkey
  ere       8-yre    ooo   1222
  abc       8-yre    icr   1001
  abc       9-oiu    efw   5601
  cse       1-wwq    pff   9878
  abc       8-yre    poi   1122
  ...        ...     ...   ...
表 product:
pname   flow_name   seq_num
fab001    abc         100
fab003    abc         150
fab201    abc         2
fab081    abc         15
yyb001    ere         221
yyb301    ere         2
yyb081    ere         1
 ...      ...         ...
条件是:由一个 dname 查出表 product 对应的 pname 记录,同时用表 flow 中相对应的 pname , ckey 的 seq_num 减去该记录的 seq_num ,因为表 flow 中存在多个 seq_num ,如果差值是负值,则一直减直到差为最小的正值,如果差不为正就返回最大的差。例如:用户输入一个 dname='8-yre'。那么,执行该 sql 就应该生成如下的记录集:
pname   flow_name   left_num
yyb001    ere         -213              --是 flow.seq_num: 8 - product.seq_num: 221 的值
yyb301    ere          1                --是 flow.seq_num: 3 - product.seq_num: 2 的值
yyb091    ere          1                --是 flow.seq_num: 2 - product.seq_num: 1 的值
fab001    ere         -96               --是 flow.seq_num: 4 - product.seq_num: 100 的值
fab003    ere         -146              --是 flow.seq_num: 4 - product.seq_num: 150 的值
fab201    ere          2                --是 flow.seq_num: 4 - product.seq_num: 2 的值
fab081    ere         -11               --是 flow.seq_num: 4 - product.seq_num: 15 的值
 ...      ...         ...
 对自学了几天 sql 的我来说,难啊!这实际上是为了编一个这样的程序:根据 dname(表 tdata)从数据库产品(表 product)表捞取对应的所剩下的生产流程步数(表 product)。表的结构是原来就有的,又不能重新设计,请高手帮忙写一个 sql 或者高手有什么好的方法。救命啊!!!