| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 401 人关注过本帖
标题:数据导入,选取最近一笔时间数据
只看楼主 加入收藏
cmo9020
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-7-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
数据导入,选取最近一笔时间数据
请问有大牛哥牛姐在吗?
小弟遇到一个sql查询问题
主档tt要导入shipp+scra数据
主档在G列输入条形码后,按鈕导入shipp+scra数据 I列代码中的内容,如果G列条形码重复的话,依照N列提取最近一笔时间为2020/7/7日,
可是一直都导入6/30那笔数据....(反橘色)
请问是那裡有问题?请大神们帮个忙修正一下数据,谢谢



Sub xx()
Dim Cn As Object, ar, i&, p$, f$, Sq$(2), s$
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set Cn = CreateObject("ADODB.Connection")
If Application.Version < 12 Then
  s = "Excel 8.0;Database="
  Cn.Open "Provider=Microsoft.JET.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName
Else
  Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
  s = "Excel 12.0;Database="
End If
With Worksheets(1)
  .Activate
  Sq(0) = "[" & .Name & "$g1:g" & .Cells(.Rows.Count, "g").End(xlUp).Row & "]a"
End With
p = ThisWorkbook.Path & "\"
ar = Array("scra.xls", "SHIPP.xls")
For i = 0 To UBound(ar)
  f = p & ar(i)
  If Dir(f, vbDirectory) <> "" Then
   Sq(1) = Sq(1) & " UNION ALL SELECT 條碼,代碼,狀態,時間 FROM [" & s & f & "].[$A1:N] WHERE 條碼 IS NOT NULL"
  End If
Next
Sq(1) = "SELECT * FROM (" & Mid(Sq(1), 12) & ") ORDER BY 時間"
Sq(1) = "SELECT 條碼,LAST(代碼) AS 代碼,LAST(狀態) AS 狀態,MAX(時間) AS 時間 FROM (" & Sq(1) & ") GROUP BY 條碼"
Sq(2) = "SELECT b.代碼 FROM " & Sq(0) & " LEFT JOIN (" & Sq(1) & ")b ON a.條碼=b.條碼"
Range("i2").CopyFromRecordset Cn.Execute(Sq(2))
Cn.Close
Set Cn = Nothing
Application.DisplayStatusBar = True
Application.ScreenUpdating = True
End Sub


[此贴子已经被作者于2020-7-8 00:05编辑过]

附件: 游客没有浏览附件的权限,请 登录注册
搜索更多相关主题的帖子: 导入 Excel Application End 数据 
2020-07-08 00:02
厨师王德榜
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:100
帖 子:595
专家分:2367
注 册:2013-2-16
收藏
得分:0 
平时工作忙,没时间给你检查那么细,只能把正确的示意出来,代码改了一半,剩下的靠你自己了。
附件: 游客没有浏览附件的权限,请 登录注册
2020-07-09 18:23
厨师王德榜
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:100
帖 子:595
专家分:2367
注 册:2013-2-16
收藏
得分:0 
总之你的查询语句不对,你可以参照我的来改。
附件: 游客没有浏览附件的权限,请 登录注册
2020-07-09 18:26
cmo9020
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-7-8
收藏
得分:0 
回复 3楼 厨师王德榜
好~先谢谢大哥了,我在研究一下~谢谢
2020-07-09 19:09
cmo9020
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-7-8
收藏
得分:0 
回复 3楼 厨师王德榜
大神~我测试成功,谢谢你
不过想请教...这段程序能精简吗?
要是我要导入5个~多档,可能会很麻烦

Dim Cn As Object, ar, i&, p$, f$, Sq$(2), s$, qstr$   'qstr -- 淏腔脤戙逄曆
qstr = "select ee.代碼 from  [Sheet1$g1:g1000]  as aa left join ( select  bb.條碼,bb.代碼,cc.sj as 時間 from  " & _
"(SELECT 條碼,代碼,狀態,時間 FROM [Excel 12.0;Database=C:\Users\X\Desktop\TEST\scra.xls].[$A1:N] " & _
"            WHERE 條碼 IS NOT NULL UNION ALL " & _
"            SELECT 條碼,代碼,狀態,時間 FROM [Excel 12.0;Database=C:\Users\X\Desktop\TEST\SHIPP.xls].[$A1:N]  " & _
"            WHERE 條碼 IS NOT NULL) as bb inner join  (SELECT 條碼, max(時間) as sj FROM  ( " & _
"SELECT 條碼,代碼,狀態,時間 FROM [Excel 12.0;Database=C:\Users\X\Desktop\TEST\scra.xls].[$A1:N]  " & _
"WHERE 條碼 IS NOT NULL      UNION ALL  " & _
"            SELECT 條碼,代碼,狀態,時間 FROM [Excel 12.0;Database=C:\Users\X\Desktop\TEST\SHIPP.xls].[$A1:N]  " & _
"            WHERE 條碼 IS NOT NULL) group by 條碼 ) as cc   " & _
"on bb.條碼  = cc.條碼  and  bb.時間 = cc.sj) as ee on aa.條碼  = ee.條碼  "
2020-07-09 19:58
厨师王德榜
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:100
帖 子:595
专家分:2367
注 册:2013-2-16
收藏
得分:20 
拼凑查询语句,尤其文件较多的时候,这种做法确实很容易把人绕晕。不如遍历所有文件。
大致思路如下:
1、把TT中填入的多个条码装入一个数组。
2、依次打开 shipp/scra/.... 等文件,在文件中查找有无与数组中的条码相同的,
如无,则关闭这个文件,打开下一个文件;如有,则找到日期最大的一条,把代码填充入数组。
   (至于如何查找更高效?用Find()方法,还是直接在当前表中用SQL查询?
     看你自己觉得哪种方式更好,一般相同条码有很多条记录的,我觉得用SQL查询更好,如果记录量不大,用FIND更好。)
3、打开下一个文件,查找,如有且时间更近,则替换新的代码进入数组,关闭文件。
4、遍历所有文件,直到完毕(此时窗口中应该只有主文件TT)。
5、把数组采集到的数据,填写入TT的列中,释放数组。
这个思路实施起来不复杂。代码量也并不多,建议你考虑一下。
2020-07-10 15:55
sssooosss
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:92
专家分:203
注 册:2019-8-27
收藏
得分:0 
共同学习
2020-07-14 14:56
快速回复:数据导入,选取最近一笔时间数据
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.065950 second(s), 8 queries.
Copyright©2004-2020, BCCN.NET, All Rights Reserved