sqlserver分组(group by)后取每组第一条和最后一条

SELECT M.*  from
(SELECT
Model.*,ROW_NUMBER () OVER (
            PARTITION BY id,
            pid
        ORDER BY
            CreateTime
        ) AS RN1,
        ROW_NUMBER () OVER (
            PARTITION BY id,
            pid
        ORDER BY
            CreateTime DESC
        ) AS RN2
    FROM
        Model
) M
WHERE    
RN1=1 or RN2 = 1

 

重点:ROW_NUMBER () OVER (
            PARTITION BY id,
            pid
        ORDER BY
            CreateTime
        ) AS RN1 

//这个是按从小到大编号,取rn1=1z则取出每组的第一条

ROW_NUMBER () OVER (
            PARTITION BY id,
            pid
        ORDER BY
            CreateTime DESC
        ) AS RN2

//这个是按从大到小编号,取rn2 =1 取出的是实际我们要的最后一条,这样就满足我们要求了,效率还好.

你可能感兴趣的:(数据库)