如何使用vb.net将多行的连续日期时间合并为单行

如何使用vb.net将多行的连续日期时间合并为单行,vb.net,ado.net,Vb.net,Ado.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) = Conver

我试图将数据与连续的日期和时间结合起来。我不知道怎么做

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
我不知道你是否理解我。我举个例子

以下是我得到的结果



有趣的问题!我在一些数据表中重新创建了您的数据,并在控制台应用程序中创建了您的结果:

    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 dst作为新数据集
Dim tblRaw As DataTable=dst.Tables.Add(“ttmpOld”)
tblRaw.Columns.Add(“否”)
tblRaw.Columns.Add(“from”)
tblRaw.列。添加(“至”)
tblRaw.Columns.Add(“持续时间”,GetType(整数))
带tblRaw。行
添加(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)
以
Dim strFrom As String=“”
Dim strFromStart As String=“”
Dim strTo As String=“”
Dim tblNew As DataTable=dst.Tables.Add(“ttmpNew”)
tblNew.Columns.Add(“否”)
tblNew.Columns.Add(“from”)
tblNew.Columns.Add(“to”)
tblNew.Columns.Add(“Duration”,GetType(整数))
Dim intNo作为整数=0
Dim intDuration为整数=0
Dim intTotal为整数=0
'循环并获取连续数据,但仅在需要时创建新行
对于tblRaw.行中的每个对象行
strFrom=objRow(“from”)
intDuration=objRow(“持续时间”)
如果strFrom strTo,则
如果是strTo“”,则tblNew.Rows.Add(intNo、strFromStart、strTo、intTotal)
intTotal=intDuration
strFromStart=strFrom
intNo=objRow(“No”)
其他的
intTotal=intTotal+intDuration
如果结束
strTo=objRow(“to”)
下一个
“最后一排
tblNew.Rows.Add(intNo、strFromStart、strTo、intTotal)
对于tblNew.行中的每个对象行
Console.WriteLine(objRow(“No”)&“,”和objRow(“from”)&“,”和objRow(“to”)&“,”和objRow(“持续时间”))
下一个
Console.ReadKey()

祝你的解决方案好运

有趣的问题!我在一些数据表中重新创建了您的数据,并在控制台应用程序中创建了您的结果:

    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 dst作为新数据集
Dim tblRaw As DataTable=dst.Tables.Add(“ttmpOld”)
tblRaw.Columns.Add(“否”)
tblRaw.Columns.Add(“from”)
tblRaw.列。添加(“至”)
tblRaw.Columns.Add(“持续时间”,GetType(整数))
带tblRaw。行
添加(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)
以
Dim strFrom As String=“”
Dim strFromStart As String=“”
Dim strTo As String=“”
Dim tblNew As DataTable=dst.Tables.Add(“ttmpNew”)
tblNew.Columns.Add(“否”)
tblNew.Columns.Add(“from”)
tblNew.Columns.Add(“to”)
tblNew.Columns.Add(“Duration”,GetType(整数))
Dim intNo作为整数=0
Dim intDuration为整数=0
Dim intTotal为整数=0
'循环并获取连续数据,但仅在需要时创建新行
对于tblRaw.行中的每个对象行
strFrom=objRow(“from”)
intDuration=objRow(“持续时间”)
如果strFrom strTo,则
如果是strTo“”,则tblNew.Rows.Add(intNo、strFromStart、strTo、intTotal)
intTotal=intDuration
strFromStart=strFrom
intNo=objRow(“No”)
其他的
intTotal=intTotal+intDuration
如果结束
strTo=objRow(“to”)
下一个
“最后一排
tblNew.Rows.Add(intNo、strFromStart、strTo、intTotal)
对于tblNew.行中的每个对象行
Console.WriteLine(objRow(“No”)&“,”和objRow(“from”)&“,”和objRow(“to”)&“,”和objRow(“持续时间”))
下一个
Console.ReadKey()

祝你的解决方案好运

这些对我帮助很大。谢谢你的帮助!这些对我帮助很大。谢谢你的帮助!