1

在此处输入图像描述

我有一个像这样的表,在后面的代码中,我必须在标签中显示 tempname 并在下拉列表中显示 rundate 我必须在下拉列表中显示最近 10 个 rundates 而没有重复的名称DDL 中的运行日期。我怎样才能做到这一点?我需要一个相同的存储过程。

  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 是标识列):

;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 回答