vb.net - 如何使用 vb.net 将多行的连续日期时间合并为单行
问题描述
我正在尝试将数据与连续的日期和时间相结合。我不知道该怎么做。
Dim dr As SqlDataReader = cmd.ExecuteReader()
Dim r As DataRow
Dim i As Int64 = 1
While dr.Read()
r = t.NewRow()
r(0) = i.ToString()
r(1) = Convert.ToDateTime(dat("fromtime")).ToString("yyyy/MM/dd HH:mm:ss")
r(2) = Convert.ToDateTime(dat("totime")).ToString("yyyy/MM/dd HH:mm:ss")
r(3) = dat("duration").ToString()
End While
我不知道你有没有得到我。我举个例子。
这是我得到的结果。
No from to Duration
1 2019/05/15 13:51:57 2019/05/15 13:52:14 17
2 2019/05/15 13:52:14 2019/05/15 13:52:38 24
3 2019/05/15 13:52:38 2019/05/15 13:52:46 8
4 2019/05/15 13:52:46 2019/05/15 13:53:40 54
5 2019/05/15 13:56:52 2019/05/15 13:57:46 54
6 2019/05/15 18:56:53 2019/05/15 18:57:03 10
Numbers 1-4 have a consecutive date and time I want it to merge into a single row.
No from to Duration
1 2019/05/15 13:51:57 2019/05/15 13:53:40 103
2 2019/05/15 13:56:52 2019/05/15 13:57:46 54
3 2019/05/15 18:56:53 2019/05/15 18:57:03 10
解决方案
有趣的问题!我在一些数据表中重新创建了您的数据,并设法在控制台应用程序中创建了您的结果:
Dim dst As New DataSet
Dim tblRaw As DataTable = dst.Tables.Add("ttmpOld")
tblRaw.Columns.Add("No")
tblRaw.Columns.Add("from")
tblRaw.Columns.Add("to")
tblRaw.Columns.Add("Duration", GetType(Integer))
With tblRaw.Rows
.Add(1, "2019/05/15 13:51:57", "2019/05/15 13:52:14", 17)
.Add(2, "2019/05/15 13:52:14", "2019/05/15 13:52:38", 24)
.Add(3, "2019/05/15 13:52:38", "2019/05/15 13:52:46", 8)
.Add(4, "2019/05/15 13:52:46", "2019/05/15 13:53:40", 54)
.Add(5, "2019/05/15 13:56:52", "2019/05/15 13:57:46", 54)
.Add(6, "2019/05/15 18:56:53", "2019/05/15 18:57:03", 10)
End With
Dim strFrom As String = ""
Dim strFromStart As String = ""
Dim strTo As String = ""
Dim tblNew As DataTable = dst.Tables.Add("ttmpNew")
tblNew.Columns.Add("No")
tblNew.Columns.Add("from")
tblNew.Columns.Add("to")
tblNew.Columns.Add("Duration", GetType(Integer))
Dim intNo As Integer = 0
Dim intDuration As Integer = 0
Dim intTotal As Integer = 0
'Loop through and get your consecutive data but only create a new row when needed
For Each objRow In tblRaw.Rows
strFrom = objRow("from")
intDuration = objRow("Duration")
If strFrom <> strTo Then
If strTo <> "" Then tblNew.Rows.Add(intNo, strFromStart, strTo, intTotal)
intTotal = intDuration
strFromStart = strFrom
intNo = objRow("No")
Else
intTotal = intTotal + intDuration
End If
strTo = objRow("to")
Next
'Last row
tblNew.Rows.Add(intNo, strFromStart, strTo, intTotal)
For Each objRow In tblNew.Rows
Console.WriteLine(objRow("No") & ", " & objRow("from") & ", " & objRow("to") & ", " & objRow("Duration"))
Next
Console.ReadKey()
祝您的解决方案好运!
推荐阅读
- android - 在 Android 应用程序中显示来自用户 Twitter 帐户的推文
- python - 使用 cv2 和 Matplotlib 从 8 个子文件夹中打印 5 张图像
- flutter - 如何使用 Swiper(Slider) 映射或索引到图像和音频?
- python - 只有第一个 tag_configure 在 treeview 小部件/tkinter 中的点击事件上执行
- python - 在给定参数内找到由其他 3 个完美立方体之和组成的所有完美立方体
- amazon-web-services - 使用 R53 和 EC2 在 AWS 上管理子域
- firebase - Android Studio google登录选项不显示gerClient
- node.js - 我是节点 js 的新手,我无法创建我的服务器请帮助我...请解释我的错误
- node.js - 如何在双嵌套数组中添加或删除元素?
- apache - 仅使用我在 htaccess 上编写的 url 访问阻止访问真实 url