Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择a";中的第一条记录;“集团”;_Sql_Sql Server 2008_Group By_Partitioning - Fatal编程技术网

Sql 选择a";中的第一条记录;“集团”;

Sql 选择a";中的第一条记录;“集团”;,sql,sql-server-2008,group-by,partitioning,Sql,Sql Server 2008,Group By,Partitioning,我正在编写一个Sequel Server 2008查询,以提取数据,使我能够制作具有“校友自”字段的校友卡。我已经让我的查询提取了他们所有的课程记录——现在我想把它缩小到只包括最古老的课程 我的代码如下所示 我在网上搜索了一下,尝试了整个行分区的方法,也尝试了在组中使用整个min/max,但没有取得太大的成功。其中唯一唯一的值是UserID——CourseID本质上是课程名称的简写(每个课程每年提供几次)。我在这里看到的所有类似示例都没有任何WHERE子句来提取初始数据集,所以我不确定它们会去哪

我正在编写一个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
我所期望的输出是这样的(每个人只有一行最早的结束日期)

您可以使用以下选项:


谢谢谢谢谢谢!!我发现我只需要添加where子句操作数来提取初始行(它们位于第一个FROM语句的正下方)
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
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