2011-09-28 49 views
3

我有一個具有以下結構的數據表。在VB.Net中過濾數據表

mid mname  version baseID 
------------------------------------ 
1  tag3   1  1 
2  tag3   2  1 
3  tag3   3  1 
4  tag5   1  4 
5  tag5   2  4 
6  tag6   1  6 

從上面的結構我需要一個類似這樣的數據表。 我需要從數據表中取最高版本。

mid mname  version baseID 
------------------------------------ 
3  tag3   3  1 
5  tag5   2  4 
6  tag6   1  6 

如何創建類似上面的數據表。 我正在使用Vb.Net

在此先感謝。

+0

我不能修改查詢。(SQL部分) – Coderr

回答

0

我用

Datatables.Compute()來獲得使用GROUP MAX值通過

Function GroupBy(ByVal i_sGroupByColumn As String, ByVal i_sAggregateColumn As String, ByVal i_dSourceTable As DataTable) As DataTable 

     Dim dv As New DataView(i_dSourceTable) 

     'getting distinct values for group column 
     Dim dtGroup As DataTable = dv.ToTable(True, New String() {i_sGroupByColumn}) 
     'adding column for the row count 
     dtGroup.Columns.Add("Max_Version", GetType(Double)) 

     'looping thru distinct values for the group, counting 
     For Each dr As DataRow In dtGroup.Rows 
      dr("Max_Version") = i_dSourceTable.Compute("MAX(" & i_sAggregateColumn & ")", i_sGroupByColumn & " = '" & dr(i_sGroupByColumn) & "'") 

     Next 

     'returning grouped/counted result 
     Return dtGroup 
    End Function 
2

這取決於你如何填充原始數據表。如果你是通過查詢數據庫做我會格式化結果在查詢本身是這樣設置:

(SQL)

select mid, mname, version, baseID 
from <table> t 
Join (select baseid, max(version) as version 
     from <table> group by baseID)maxVersion 
    on maxVersion.baseid = t.baseid and maxVersion.version = t.version 

這將其放入數據表之前格式化數據。

如果數據表由其他方式填充,並且需要過濾它,然後將其放入另一個數據表中。那麼一個簡單的方法來做到這一點(假設你的數據表上總是整理以上述方式)是:

for i as integer = 0 to datatable.rows.count - 1 
    if i < datatable.rows.count - 1 Then 
     if datatable.rows(i)(4).value <> datatable.rows(i+1)(4).value then 
      newDataTable.rows.Add(datatable.rows(i).itemArray()) 
     End If 
    Else 
     newDataTable.rows.Add(datatable.rows(i).itemArray()) 
    End if 
Next 

現在的語法可能會關閉在這裏或那裏(寫在notpad),但邏輯的想法那裏。假設每次都有相同的格式,那麼我將檢查行更改爲新的baseid並將該行添加到新的數據表。從你發佈的例子看來,特定baseid的最大版本是該baseid的最後一行。

克里斯

+0

感謝UR答案。我無法修改查詢。(SQL部分) – Coderr

+0

您提供的解決方案不起作用。索裏讓你失望:( – Coderr