1

ここに画像の説明を入力してください

私はこのようなテーブルを持っており、背後のコードでは、ラベルに一時名のように表示し、ドロップダウンリストに実行日を表示する必要がありますドロップダウンに重複する名前なしで最後の10回の実行日を表示する必要がありますDDLのrundates。どうすればこれを達成できますか??同じためのストアドプロシージャが必要です。

  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataTable dt = new DataTable();
        dt = Common.rundate();
        DropDownList ddl = e.Row.FindControl("DropDownList1") as DropDownList;

        ddl.DataTextField = "RunDate";
        ddl.DataValueField = "TempID";
        ddl.DataSource = dt;
        ddl.DataBind();


    }

}

   public static DataTable rundate()
    {
        DBAccess objDBAccess = new DBAccess();
        DataTable dt = new DataTable();

        try
        {
            objDBAccess.AddParameter("@tempname", SqlDbType.VarChar);
            objDBAccess.AddParameter("@tempid", SqlDbType.Int);
            objDBAccess.AddParameter("@rundate", SqlDbType.DateTime);
            dt = objDBAccess.ExecuteDataTable("display_rundates");
            return dt;
        }
        catch
        {
            return null;
        }
    }
4

1 に答える 1

0

このクエリを試してください:

  SELECT 
      TOP 10
         MAX(RunDate) RunDate
      ,  TempName
  From 
      tblTest
  GROUP BY
      TempName
  ORDER BY 
      RunDate DESC

TempID を取得する必要がある場合は、これを試してください (TempID が ID 列であると仮定します)。

;WITH cteDllLastRun AS (
                             SELECT 
                                  MAX(TempID) TempID
                                 ,TempName
                             FROM
                                 tblTest
                             GROUP BY
                                 TempName
                        )
SELECT 
   TOP 10
     tblTest.*
FROM
   cteDllLastRun
INNER JOIN
   tblTest
ON
   tblTest.TempID = cteDllLastRun.TempID
ORDER BY
    tblTest.RunDate DESC

tempID が一意でない場合のこのクエリ:

;WITH cteDlls AS (
     SELECT 
          DISTINCT 
             TempName
     FROM
         tblTest
)
SELECT 
    TOP 10
     vwLastRun.*
FROM
   cteDlls 
CROSS APPLY
    (
         SELECT TOP 1 
              *
         FROM
             tblTest
         WHERE
             tblTest.TempName = cteDlls.TempName
         ORDER BY
            RunDate DESC
    ) vwLastRun
ORDER BY
    RunDate DESC

最後のソリューションでは、適切なパフォーマンスが得られるように、TempName と RunDate がインデックス化されていることを確認する必要があります。

于 2012-10-26T13:40:51.307 に答える