以文本方式查看主题
- Foxtable(狐表) (http://foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2)
---- [求助]需要救命 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=99628)
|
-- 作者:小美菜
-- 发布时间:2017/4/23 10:32:00
-- [求助]需要救命
我有一个数据表,其中有3000只股票,每只股票每天都有数据,现在我需要删除有可能的某票某天重复数据,现在已经有2年的数据了,
Dim bTbl As New GroupTableBuilder( "特定股票加仓股",DataTables("特大单加仓股")) Dim outTbl As Table bTbl.Groups.AddDef("股票代码") bTbl.Groups.AddDef("交易日期",DateGroupEnum.None,"交易日期") \' bTbl.Filter="[股票代码] = " & tcode(i)\' ORDER BY 交易日期 Desc" bTbl.Build outTbl =Tables("特定股票加仓股") \'bTbl.Build(True) \'生成一个DataTable If outTbl.Rows.Count>0 Then For Each dr As Row In outTbl.Rows Output.Show("正在清理【特大单加仓股】 代码【" & dr("股票代码") & "】 日期【" & dr("交易日期") & "】") DataTables("特大单加仓股").DeleteFor("[股票代码]=" & dr("股票代码") & " And [交易日期]= #" & dr("交易日期") & "#" ) Next End If
Return 1
问题是1分多钟才能处理1只股票,这样我要2天,才能完成,请问各位大侠,还有快一点的方法吗
|
-- 作者:有点色
-- 发布时间:2017/4/23 11:11:00
--
直接删除可以参考
Dim idx As String = "-1," Dim idx_temp As String = "" Dim pdr As DataRow = Nothing Dim count As Integer = 0 Dim cs As String = "第一列,第二列" For Each dr As DataRow In DataTables("表A").Select("", cs) Dim flag As Boolean = False If pdr IsNot Nothing Then For Each c As String In cs.split(",") If pdr(c).replace(" ","") <> dr(c).replace(" ", "") Then flag = True Exit For End If Next If flag Then If count > 1 Then idx &= idx_temp End If count = 1 idx_temp = "" Else count += 1 idx_temp &= dr("_Identify") & "," End If Else count += 1 End If pdr = dr Next
If count > 1 Then idx &= idx_temp End If
Tables("表A").Filter = "_Identify not In (" & idx.trim(",") & ")"
\'DataTables("表A").DeleteFor("_Identify not In (" & idx.trim(",") & ")")
|
-- 作者:有点色
-- 发布时间:2017/4/23 11:12:00
--
大数据量,建议用sql语句,如果用sql语句,参考
http://www.baidu.com/baidu?wd=sqlserver+%C9%BE%B3%FD%D6%D8%B8%B4&tn=monline_4_dg
|
-- 作者:小美菜
-- 发布时间:2017/4/23 11:21:00
--
哎,看来是没得救了,foxtable处理速度貌似太慢,我还有一个表与上面讲的差不多,要按时间统计连续,最近20个数据统计,最近10个数据统计,最近半年数据统计,最近一年半数据统计并保存,结果3分多种搞一只股票,3000只要6天,妈噎,我晕死了。没办法,现在急着用,先将就ACCESS与foxtable。其它数据库还不会
[此贴子已经被作者于2017/4/23 11:25:06编辑过]
|
-- 作者:小美菜
-- 发布时间:2017/4/23 13:05:00
--
Dim bTbl As New GroupTableBuilder( "特定股票加仓股",DataTables("特大单加仓股")) Dim outTbl As Table bTbl.Groups.AddDef("股票代码") bTbl.Groups.AddDef("交易日期",DateGroupEnum.None,"交易日期") b.Totals.AddDef("股票代码",AggregateEnum.Count,"出现次数") \' bTbl.Filter="[股票代码] = " & tcode(i)\' ORDER BY 交易日期 Desc" bTbl.Build outTbl =Tables("特定股票加仓股") \'bTbl.Build(True) \'生成一个DataTable If outTbl.Rows.Count>0 Then outTbl.Filter="[出现次数] > 1" For Each dr As Row In outTbl.Rows Output.Show("正在清理【特大单加仓股】 代码【" & dr("股票代码") & "】 日期【" & dr("交易日期") & "】总共【" & outTbl.Rows.Count) \' If dr("出现次数")>1 Then Dim drs As List(Of DataRow) = DataTables("特大单加仓股").Select( "[股票代码] = \'" & dr("股票代码") & "\' And [交易日期] = #" & dr("交易日期") & "#","ID") If DRS.Count>1 Then For i As Integer=1 To DRS.Count-1 DataTables("特大单加仓股").DeleteFor("[ID] =" & DRS(I)("ID")) Next Output.Show("已经清理【特大单加仓股】 代码【" & dr("股票代码") & "】 日期【" & dr("交易日期") & "】") End If \' End If \' DataTables("特大单加仓股").DeleteFor("[股票代码]=" & dr("股票代码") & " And [交易日期]= #" & dr("交易日期") & "#" ) Next End If Output.Show("清理完成")
Return 1
用此法快速解决
|
-- 作者:有点色
-- 发布时间:2017/4/23 13:06:00
--
处理速度和你写的代码有关,你重复不断的查,肯定会慢啊。
具体问题,做实例上来测试。
|
-- 作者:小美菜
-- 发布时间:2017/4/23 16:19:00
--
20小时的计算时间,用此法仅30分钟
|
-- 作者:有点色
-- 发布时间:2017/4/23 16:58:00
--
参考2楼、3楼方法,不可能慢。慢,说明你查询次数太多。
|