0

我需要显示不同的行,实际上应该根据日期字段为每年获取 1 个最新行。

我尝试使用 CTE 解决此问题,但在进一步测试时它无法正常工作,因为它只会获得基于 ROWNumber 的 ROW,如果我们使用过滤器,那么它不会获得所需的结果。

所以我想从表中获取 AlbumID、AlbumName、AlbumDate 和 AlbumYear_YYYY 并将其传递给数据集,然后使用 LINQ 再次使用此数据集来进一步获取基于年度最新专辑的唯一行

假设我的表有以下行

专辑 ID、专辑名称、专辑日期、专辑图标

我的 MS-SQL 查询

string sql= "SELECT AlbumID, AlbumName, AlbumIcon, AlbumDate, DATEPART(YYYY, AlbumDate) AS Year FROM PhotoAlbumName "

DataSet ds = DataProvider.Connect_Select(strSql);
DataView dv = ds.Tables[0].DefaultView;

//DO LINQ HERE 并将 linq 的值传递给 Pager 控件

 PagerControl1.BindDataWithPaging(rptAlbumsCategories, dv.Table);

我不确定如何执行此操作,但如果它有效,那么它将消除由于以下 sql 查询而发生的不需要的结果。

;WITH DistinctYEAR AS
(
    SELECT AlbumID, AlbumIcon, AlbumDate, AlbumVisible,AlbumName,
        ROW_NUMBER() OVER(PARTITION BY DATEPART(YYYY,AlbumDate) ORDER BY AlbumDate) AS 'RowNum'
    FROM PhotoAlbumName 
)
SELECT * FROM DistinctYEAR WHERE RowNum = 1 AND AlbumVisible = 1 ORDER BY AlbumDate DESC

更新:

4

1 回答 1

1

我不确定,但我认为您的 cte 不正确。您应该WHERE AlbumVisible = 1CTE外部应用 not SELECT

;WITH DistinctYEAR AS
(
    SELECT AlbumID, AlbumIcon, AlbumDate, AlbumVisible,AlbumName,
        ROW_NUMBER() OVER(PARTITION BY DATEPART(YYYY,AlbumDate) ORDER BY AlbumDate) AS 'RowNum'
    FROM PhotoAlbumName
    WHERE AlbumVisible = 1  
)
SELECT dy.* 
FROM DistinctYEAR dy 
WHERE RowNum = 1
ORDER BY AlbumDate DESC
于 2013-09-29T11:47:57.990 回答