0

Page_LoadでGridViewにフィードするDatatableを以下に作成しました

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim strQuery As String = "SELECT DISTINCT setsTbl.setName, trainingTbl.t_date, userAssessmentTbl.o_id FROM userAssessmentTbl LEFT JOIN trainingTbl ON userAssessmentTbl.tt_id = trainingTbl.tt_id LEFT JOIN setsTbl ON trainingTbl.s_id = setsTbl.s_id LEFT JOIN outcomesTbl ON userAssessmentTbl.o_id = outcomesTbl.o_id WHERE UserId = @UserId ORDER BY setName, t_date DESC "

    Dim cmd As New SqlCommand(strQuery)
    cmd.Parameters.AddWithValue("@UserId", userString)
    Dim dt As DataTable = GetData(cmd)

   GridView1.DataSource = dt
   GridView1.DataBind()

End Sub

現在、値を出力します。

SetName t_date o_id
name1 12.12.12 1
name2 13.07.12 1
name2 15.07.12 2
name3 16.07.12 4
name3 17.07.12 3

以下のDataTableを取得して、次のような個別の行を出力したいと思います。

SetName t_date o_id
name1 12.12.12 1
name2 13.07.12 1
name3 16.07.12 4

誰かが私にこれが達成できるのか教えてもらえますか?

4

1 に答える 1

0

各名前の最も早い日付が必要なようです。その場合は、Group By と min 関数を使用できます。

setsTbl.setName, Min(trainingTbl.t_date), Min(outcomesTbl.o_id)
FROM userAssessmentTbl LEFT JOIN trainingTbl ON userAssessmentTbl.tt_id = trainingTbl.tt_id 
LEFT JOIN setsTbl ON trainingTbl.s_id = setsTbl.s_id LEFT JOIN outcomesTbl 
ON userAssessmentTbl.o_id = outcomesTbl.o_id 
WHERE UserId = @UserId Group By setsTbl.setName ORDER BY setsTbl.setName
于 2012-08-02T16:17:38.527 に答える