我正在编写Sequel Server 2008查询以提取数据,这将允许我制作具有“校友自”字段的校友卡。我已经得到了我的查询以提取他们所有的课程记录 - 现在我想将其缩小到仅包括最旧的课程。
到目前为止我的代码列在下面。
我已经在线查看了整个行分区以及使用整个min / max与组,但我没有取得多大成功。唯一的唯一值是UserID - CourseID本质上是课程名称的简写(每个都是一年提供几次)。我在这里看到的所有类似例子都没有任何WHERE子句来提取初始数据集,所以我不确定它们去哪里。
非常欢迎任何帮助或建议!
SELECT
DisplayName, UserID, CourseID, EndDate
FROM
BigTable
WHERE
SIMPLE WHERE CLAUSE 1
AND SIMPLE WHERE CLAUSE 2
AND SIMPLE WHERE CLAUSE 3
ORDER BY LastName, FirstName, MiddleName, EndDate ASC
生成这个:
DisplayName UserID CourseID EndDate
-------------|--------|--------|------------------------
John Doe | 123579 | DPRM | 2000-09-29 00:00:00.000
Mother Goose | 121157 | ICCT | 2009-06-19 00:00:00.000
Boy Horner | 117223 | ICCT | 2003-11-21 00:00:00.000
Boy Horner | 117223 | DPRM | 2008-06-20 00:00:00.000
Miss Muffett | 115280 | SDPB | 2006-11-03 00:00:00.000
Simple Simon | 190423 | SDPB | 2013-10-11 00:00:00.000
Jack Sprat | 115868 | SDPA | 2005-11-04 00:00:00.000
Jack Sprat | 115868 | SSTR | 2008-11-07 00:00:00.000
我期待的那种输出看起来像这样(每人只有一行,最早的结束日期)
DisplayName UserID CourseID EndDate
-------------|--------|--------|------------------------
John Doe | 123579 | DPRM | 2000-09-29 00:00:00.000
Mother Goose | 121157 | ICCT | 2009-06-19 00:00:00.000
Boy Horner | 117223 | ICCT | 2003-11-21 00:00:00.000
Miss Muffett | 115280 | SDPB | 2006-11-03 00:00:00.000
Simple Simon | 190423 | SDPB | 2013-10-11 00:00:00.000
Jack Sprat | 115868 | SDPA | 2005-11-04 00:00:00.000
答案 0 :(得分:2)
您可以将ROW_NUMBER
与CTE
:
WITH CTE AS
(
SELECT DisplayName, UserID, CourseID, EndDate,
RN = ROW_NUMBER () OVER (PARTITION BY UserID ORDER BY EndDate ASC)
FROM dbo.TableName
)
SELECT DisplayName, UserID, CourseID, EndDate
FROM CTE WHERE RN = 1