以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]關於SELECT  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=91008)

--  作者:PeterGu
--  发布时间:2016/9/27 15:13:00
--  [求助]關於SELECT
現在有一個訂單表,總共有四個列,"產品", "供應商", "單價", "交易日期"
想要生成一個SQL查詢表,查詢每一個產品的訂單紀錄,但是只想根據每一個產品的最近一次交易日期來查詢單價
比方說底下的表
產品 供應商 單價 交易日期
A     XXX   10   2016-9-27
A     XXX   5     2016-9-26
B     XXX   20   2016-9-25
B     XXX   6     2016-9-24
C     XXX   30   2016-9-23
C     XXX   7     2016-9-22
生成後的查詢表應該是:
A     XXX   10   2016-9-27
B     XXX   20   2016-9-25
C     XXX   30   2016-9-23

請問這樣SQL語句要怎麼寫


--  作者:有点蓝
--  发布时间:2016/9/27 15:34:00
--  
以下sel ect中的空格去掉

sel ect a.* from {订单} a inner join (sel ect 产品,Max(交易日期) as 交易日期 from {订单} b group by 产品) as b on a.产品 = b.产品 and a.交易日期 = b.交易日期

sel ect * from {订单} a where a.交易日期 = (sel ect Max(交易日期) from {订单} as b where a.产品 = b.产品 )

--  作者:PeterGu
--  发布时间:2016/9/27 15:38:00
--  
感謝有點藍大大
--  作者:PeterGu
--  发布时间:2016/9/27 16:11:00
--  
有點藍大大, 我發現用您的SQL語句,生成查詢表花的時間相當久,估計是因為我的訂單表有七萬多筆數據。
我原先的語句是:SEL-ECT DISTINCT 产品供應商單價交易日期 FROM {订单} ORDER BY 交易日期 DESC
這樣速度快很多,可是不知道為什麼產品還是有重複, 明明產品用了DISTINCT


--  作者:有点蓝
--  发布时间:2016/9/27 16:20:00
--  
给产品和日期设置创建索引试试

DISTINCT是指同时比较后面的所有字段都同时不重复,何况也不能只取最大日期

--  作者:PeterGu
--  发布时间:2016/9/27 16:29:00
--  
原來如此,是我誤解了DISTINCT的用法,謝謝您
另外我剛試用了另一個辦法:
先用SEL-ECT 产品供應商單價交易日期 FROM {订单} ORDER BY 交易日期 DESC
生成查詢表後
Tables("查詢表").RepeatFilter("产品", 1)
就可以把重複的產品去掉,而且因為查詢表照著日期降序排列,所以去掉的重複值剛好是去掉最新一筆交易日期以外的數據
現在數據太多,還無法百分之百肯定,但是看了一下前面的一些數據,似乎可行
跟您求證一下,RepeatFilter是否會照著表的Sortkey去排除重複值

--  作者:有点蓝
--  发布时间:2016/9/27 16:55:00
--  
RepeatFilter跟Sortkey没有任何关系

RepeatFilter只能筛选指定某一列的重复值,并不能判断是否最大日期

--  作者:有点蓝
--  发布时间:2016/9/27 16:57:00
--  
2楼的sql不该比你加载7W的数据要慢的,加上适当的索引测试
--  作者:PeterGu
--  发布时间:2016/9/27 17:16:00
--  
好的 我試試 謝謝