作者nesq (扁Q)
看板Database
标题[SQL ] 请问如何选取最小值
时间Thu Dec 15 01:42:17 2011
TF001 = 单别
TF002 = 单号
TF003 = 订单项次序号
TF004 = 版次
TF005 = 订单日期
利用 TF001 & TF002 & TF003 决定的情况下,可能会有多个版次 . 即 TF004 可能为 MULTI VALUE,
而由於可给使用者查询订单日期范围, 例 : TF005 > 2011/11/01 AND TF005 < 2011/11/10
会挑选多笔在日期内的订单资料,而我又必须只挑选同一笔单别.单号.项次序号 下版次为最小的版次 .
可能情况是
TF001 | TF002 | TF003 | TF004 | TF005
1101 1101001 0001 0002 2011/11/05
1101 1101001 0001 0003 2011/11/05
1101 1101002 0002 0003 2011/11/08
1101 1101003 0003 0001 2011/11/09
需剔除 第二笔资料, 因为存在两个版次,
我试着
1 SELECT TF001,TF002,TF003,TF005,MIN(TF004)
2 FROM COPTF
3 GROUP BY TF001,TF002,TF003,TF005
可以得到正确的答案如下
TF001 | TF002 | TF003 | TF004 | TF005
1101 1101001 0001 0002 2011/11/05
1101 1101002 0002 0003 2011/11/08
1101 1101003 0003 0001 2011/11/09
然而因为表格还要查询其他的栏位
TF006 = 订单预交日
TF001 | TF002 | TF003 | TF004 | TF005 | TF006
1101 1101001 0001 0002 2011/11/05 2011/11/17
1101 1101001 0001 0003 2011/11/05 2011/11/14
1101 1101002 0002 0003 2011/11/08
1101 1101003 0003 0001 2011/11/09
这边的意思是 再版次中修改了 订单预交日的日期,而其他值不变,空值代表着不修改
在这个情况下,我做了下面查询
1 SELECT TF001,TF002,TF003,TF005,TF006 ,MIN(TF004)
2 FROM COPTF
3 GROUP BY TF001,TF002,TF003,TF005 , TF006
得到下面结果
TF001 | TF002 | TF003 | TF004 | TF005 | TF006
1101 1101001 0001 0002 2011/11/05 2011/11/17
1101 1101001 0001 0003 2011/11/05 2011/11/14
1101 1101002 0002 0003 2011/11/08
1101 1101003 0003 0001 2011/11/09
并没有办法得到想要结果
又做了下面查询
1 SELECT TF001,TF002,TF003,TF005,MIN(TF006) ,MIN(TF004)
2 FROM COPTF
3 GROUP BY TF001,TF002,TF003,TF005
得到
TF001 | TF002 | TF003 | TF004 | TF005 | TF006
1101 1101001 0001 0002 2011/11/05 2011/11/14
1101 1101002 0002 0003 2011/11/08
1101 1101003 0003 0001 2011/11/09
他将两笔资料的值做比较而选取了第三版的TF006= 2011/11/14,并不?选择第二版的 2011/11/17,出现了判断错误,
想请问有哪种写法可以得到正确的值吗
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.110.64.222
1F:→ fantasyj:DBMS? 12/15 07:10