Foxtable(狐表)用户栏目专家坐堂 → [求助]同类行相邻行对比标记(已解决)


  共有3970人关注过本帖树形打印复制链接

主题:[求助]同类行相邻行对比标记(已解决)

帅哥哟,离线,有人找我吗?
yyzlxc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1530 积分:10639 威望:0 精华:0 注册:2008/9/24 11:16:00
[求助]同类行相邻行对比标记(已解决)  发帖心情 Post By:2015/4/22 10:47:00 [只看该作者]

要求对同类行(员工编号相同)按日期时间顺序的相邻行,对设备编号进行比较,设备编号相同的,时间大的行标记为1,否则标记为0。下面这段代码,不能达到此效果,如何修改代码实现上述效果,请各位老师指教,谢谢!!

Tables("表B").Sort = "员工编号,日期时间"
Dim ygbhs As List(Of String) = DataTables("表B").GetValues("员工编号")
Dim sbbhs As List(Of String) = DataTables("表B").GetValues("设备编号")
For Each ygbh As String In ygbhs
    For Each sbbh As String In sbbhs
        Dim drs As List(Of DataRow) = DataTables("表B").Select("[员工编号] = '" & ygbh &"' And [设备编号] = '" & sbbh &"'","日期时间")
        For n As Integer = 0 To drs.Count - 1 '遍历所有行
            If n > 0 AndAlso drs(n)("日期时间") > drs(n-1)("日期时间") AndAlso drs(n)("设备编号") = drs(n-1)("设备编号") Then
                drs(n)("标记") = 1
            Else
                drs(n)("标记") = 0
            End If
        Next
    Next
Next
Tables("表B").AutoSizeCols()


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.foxdb


[此贴子已经被作者于2015/4/22 14:16:07编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/22 10:52:00 [只看该作者]

按日期时间顺序的相邻行? 没看明白

 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1530 积分:10639 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2015/4/22 11:01:00 [只看该作者]

谢谢Bin老师的回复,就是按日期时间列的顺序,达到效果列的要求。请老师指教,谢谢!!

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/22 11:03:00 [只看该作者]

例如有3个B25  按照时间排序把 后面两个标记为1?

 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1530 积分:10639 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2015/4/22 11:05:00 [只看该作者]

而且相同的设备编号,后面两行标记为1.

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/22 11:22:00 [只看该作者]

u pdate {表B} set 标记=1 where [_Identify] not in (select [_Identify] f rom {表B} a inner join  (Select 员工编号,设备编号,min(日期时间) As 日期时间 F rom {表B} Group By 员工编号,设备编号) b on a.日期时间= b.日期时间 and a.员工编号=b.员工编号 and a.设备编号=b.设备编号)

 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1530 积分:10639 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2015/4/22 12:30:00 [只看该作者]

代码有误,修改后运行通过,但是不符要求。要求是,以员工编号为组,日期时间为序,如相邻两行设备代码相同,时间大的行标记为1。


 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1530 积分:10639 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2015/4/22 12:32:00 [只看该作者]




图片点击可在新窗口打开查看此主题相关图片如下:捕获.jpg
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
逛逛
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2015/4/22 12:43:00 [只看该作者]

'Tables("表B").Sort =  "员工编号,日期时间,设备编号"
Dim drs As List(Of DataRow) = DataTables("表B").Select("","员工编号,日期时间,设备编号")
Dim dr As DataRow
Dim dr1 As DataRow = drs(drs.Count - 1)
For i  As Integer = drs.Count - 2 To 0 Step -1
    dr = drs(i)
   
    If dr("员工编号") = dr1("员工编号") AndAlso dr("设备编号") = dr1("设备编号") Then
        dr1("标记") = 1
    Else
        dr1("标记") = 0
    End If
    dr1 = dr
Next

 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1530 积分:10639 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2015/4/22 13:27:00 [只看该作者]

谢谢逛逛老师的指教,达到预期效果,存在一点瑕疵,好像第一行不能填充标记,能否解决。再次感谢逛逛老师!!

 回到顶部
总数 12 1 2 下一页