zoukankan      html  css  js  c++  java
  • sql server之ROW_NUMBER() OVER()取每组的第N行数据

    先看个例子:

    document_id card_holder_id created_date document_type_id
    1 1 2015-7-1 1
    2 4 2015-7-2 1
    3 4 2015-7-3 5

     

     

     

     

    table: document

    大致的场景就是

        取每个card holder的最新的一条document_type_id为5数据, 并取得document_type_name的值(需要join另外一张表, 这里就不列出来了)。

    SQL实现:

    SELECT 
        document_type_id 
    FROM
    (
        -- 按card holder分组 按created_date降序排列
        SELECT 
            ROW_NUMBER() 
            OVER (
                PARTITION BY card_holder_id 
                ORDER BY created_date DESC
            ) AS row,
            document_type_id
        FROM
            document
        WHERE document_type_id = 5
    )AS T
    WHERE T.row = 1
    -- 这里取的是第一行数据

    定义

        返回结果集分区内行的序列号,每个分区的第一行从 1 开始。

    语法

        ROW_NUMBER() OVER( [ PARTITION BY [COLUMN1] ] ORDER BY [COLUMN2])

        绿色字体表示选填, 即: ROW_NUMBER() OVER(ORDER BY [COLUMN])。

    备注   

        除非以下条件成立,否则不保证在每次执行时,使用 ROW_NUMBER() 的查询所返回行的顺序完全相同。

    1. 分区列的值是唯一的。

    2. ORDER BY 列的值是唯一的。

    3. 分区列和 ORDER BY 列的值的组合是唯一的。

  • 相关阅读:
    Git远程操作详解
    Markdown介绍
    Git & GitHub 学习
    小甲鱼Python笔记(类)
    小甲鱼Python笔记(下)
    小甲鱼Python笔记(上)
    compare.go
    compact_op.go
    cluster.go
    client.go
  • 原文地址:https://www.cnblogs.com/MonkeyKingK/p/5021740.html
Copyright © 2011-2022 走看看