以文本方式查看主题 - 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 * 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 -- 好的 我試試 謝謝 |