首页 > 解决方案 > 如何正确分区表?

问题描述

任务:我需要根据 Time_Frame 列获取 EARLIEST 记录行。

问题:很多学生有多个记录(学生可以在不同的学校注册)

表格格式:Student_ID、Time_Frame 加上随机的个人信息列。

数据示例:不确定如何在此处加载 .xls,但是,我仅在 .pgn 上上传了一名学生的数据,我需要一个查询,该查询将根据 time_frame 列返回黄色行,因为这将是最早的注册对于这个人。我尝试了下面的代码,但它不起作用。

SELECT *
FROM (
    SELECT 
        t.*, 
       ROW_NUMBER() OVER(
            PARTITION BY  TIME_FRAME, STUDENT_ID
            ORDER BY STUDENT_ID DESC 
            ) rn
    from #test t
) t
WHERE rn = 1
and STUDENT_ID = '00000001A' 

在此处输入图像描述

标签: sql-server

解决方案


如果您只想按 time_frame 查找特定学生的最早记录,则需要按 time_frame 排序:

SELECT *
FROM (
    SELECT 
        t.*, 
       ROW_NUMBER() OVER(ORDER BY TIME_FRAME ASC) rn
    from #test t
    WHERE STUDENT_ID = '00000001A' 
) t
WHERE rn = 1

如果要查找每个学生的最早记录,则必须按 Student_ID 进行分区:

SELECT *
FROM (
    SELECT 
        t.*, 
       ROW_NUMBER() OVER(
            PARTITION BY  STUDENT_ID
            ORDER BY TIME_FRAME ASC 
            ) rn
    from #test t
) t
WHERE rn = 1

推荐阅读