sql 选择每个GROUP BYgroup中的第一行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 选择每个GROUP BYgroup中的第一行相关的知识,希望对你有一定的参考价值。

/*
On Oracle 8i+, SQL Server 2005+, PostgreSQL 8.4+, DB2, Firebird 2.1+, Teradata, Sybase, Vertica:
*/
WITH summary AS (
    SELECT p.id, 
           p.customer, 
           p.total, 
           ROW_NUMBER() OVER(PARTITION BY p.customer 
                                 ORDER BY p.total DESC) AS rk
      FROM PURCHASES p)
SELECT s.*
  FROM summary s
 WHERE s.rk = 1;
 
 /*
 Supported by any database:
 But you need to add logic to break ties
 */
SELECT MIN(x.id),  -- change to MAX if you want the highest
     x.customer, 
     x.total
FROM PURCHASES x
JOIN (SELECT p.customer,
             MAX(total) AS max_total
        FROM PURCHASES p
    GROUP BY p.customer) y ON y.customer = x.customer
                          AND y.max_total = x.total
GROUP BY x.customer, x.total

-- Reference: http://stackoverflow.com/a/3800572

以上是关于sql 选择每个GROUP BYgroup中的第一行的主要内容,如果未能解决你的问题,请参考以下文章