我需要显示不同的行,实际上应该根据日期字段获得每年最新的1行。
我尝试使用CTE解决这个问题,但是在进一步测试时它没有正常工作,因为它只会获得基于ROWNumber的ROW,如果我们使用过滤器,那么它就无法获得所需的结果。
所以我想从表中获取AlbumID,AlbumName,AlbumDate和AlbumYear_YYYY并将其传递给数据集,然后再使用LINQ这个数据集来进一步获取基于YEAR年度最新专辑的唯一行
假设我的表有以下行
AlbumID,AlbumName,AlbumDate,AlbumIcon
我的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
更新:
答案 0 :(得分:1)
我不确定,但我认为你的cte不正确。您应该应用WHERE AlbumVisible = 1
上的CTE
而不是外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