如何使用 vb.net 将多行的连续日期时间合并为单行
How do I merge consecutive datetimes of multiple rows into single row using 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()
祝您解决方案顺利!
我正在尝试将数据与连续的日期和时间相结合。我不知道该怎么做。
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()
祝您解决方案顺利!