以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求,打卡数据处理思路,删除中间多余数据。  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=185529)

--  作者:菜鸟王中王
--  发布时间:2023/2/28 14:41:00
--  求,打卡数据处理思路,删除中间多余数据。
表头如下:
工号 、姓名、时间、位置
记录如下:
001  张三   2023-02-27 07:54:34  地点1
001  张三   2023-02-27 08:54:34  地点1
001  张三   2023-02-27 09:54:34  地点1
001  张三   2023-02-27 12:54:34  地点1
001  张三   2023-02-27 20:54:34  地点1
001  张三   2023-02-28 07:54:34  地点1

问题如下:
1、需要删除中间的数据,即:只要最早的打卡记录与最晚的打卡记录(001  张三   2023-02-27 07:54:34  地点1与001  张三   2023-02-27 20:54:34  地点1)
2、最后的数据只保留一早一晚的记录,至于一天只有一次的打卡记录的我还没有思路如何处理?

--  作者:有点蓝
--  发布时间:2023/2/28 15:27:00
--  
dim t as table = tables("表A")
t.sort = "工号,时间"
dim r1 as row = t.rows(t.rows.count - 1)
dim r as row
for i as integer = t.rows.count - 2 to 1 step -1
r = t.rows(i)
if r1("工号") = r("工号") andalso r1("时间").date = r("时间").date andalso t.rows(i-1)("工号") = r("工号") andalso t.rows(i-1)("时间").date = r("时间").date
r.delete
else
r1=r
end if
next

--  作者:菜鸟王中王
--  发布时间:2023/3/31 10:11:00
--  
蓝版,我把实体表改成窗口表后,提示:
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.8.18.1
错误所在事件:窗口,窗口1,Button6,Click
详细错误信息:
未找到类型“String”的公共成员“date”。

代码如下:
Dim t As Table = Tables("窗口1_Table1")
t.sort = "gh,sj"
Dim r1 As Row = t.rows(t.rows.count - 1)
Dim r As Row
For i As Integer = t.rows.count - 2 To 1 Step - 1
    r = t.rows(i)
    If r1("gh") = r("gh") AndAlso r1("sj").date = r("sj").date AndAlso t.rows(i - 1)("gh") = r("gh") AndAlso t.rows(i - 1)("sj").date = r("sj").date Then
        r.delete
    Else
        r1 = r
    End If
Next

求助,谢谢啦。

--  作者:有点蓝
--  发布时间:2023/3/31 10:16:00
--  
sj列是字符列,不是日期列

AndAlso t.rows(i - 1)("sj") = r("sj")Then

--  作者:菜鸟王中王
--  发布时间:2023/3/31 11:14:00
--  
谢谢蓝版,目前我发现了一个问题:
我在mysql中把字段类型改为 datetime,但是导入窗口表,会丢失时间部分,即只有yyyy-mm-dd,所以我用Convert.ToDateTime(string),直接把字符串转换为日期时间类型。
另外目前数据量大约有100多万条记录,默认30秒的时间是显示超时的提示:
Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding. Timeout in IO operation
 可以在连接文件 config.json中,mysql连接信息追加一条:Connection Timeout= 2000 ,和 声明数据库连接的时候加一条如下:
Dim db = HySql.DataBaseFactory.CreateDatabase()
db.CommandTimeout = 200
.......
非常感谢蓝版,希望这些能帮助其它人。

--  作者:有点蓝
--  发布时间:2023/3/31 11:30:00
--  
时间部分不会丢失的,绑定表格后,设置一下窗口表的日期格式即可:http://www.foxtable.com/webhelp/topics/1611.htm
--  作者:菜鸟王中王
--  发布时间:2023/3/31 11:38:00
--  
好的 非常感谢,冒昧咨询,有没有直接把查询表转换为数据表的函数,遍历查询表然后再存储到foxtable的数据表效率好慢。
--  作者:有点蓝
--  发布时间:2023/3/31 11:46:00
--  
没有的
--  作者:菜鸟王中王
--  发布时间:2023/3/31 11:47:00
--  
还是非常感谢foxtable的蓝版,买了永久高开,很久没有用过了,非常谢谢。