简体   繁体   English

根据特定字段中的最大值将MAX()结果限制为一行

[英]Limit MAX() result to one row based on highest value in a particular field

Of course my data set is more complex, but this is essentially what I have: 当然,我的数据集更为复杂,但这实际上是我拥有的:

+--------+--------+-------+
| SEQ_NO | FILTER | VALUE |
+--------+--------+-------+
|      1 | 'A'    |     5 |
|      2 | 'A'    |    10 |
|      3 | 'A'    |    15 |
+--------+--------+-------+

Here is my query: 这是我的查询:

  SELECT MAX(SEQ_NO)
       , FILTER
       , VALUE
    FROM TABLE
GROUP BY FILTER
       , VALUE

This returns my entire data set. 这将返回我的整个数据集。 How can I alter my query so that it only returns the record with the highest SEQ_NO ? 如何更改查询,使其仅返回具有最高SEQ_NO的记录?

SELECT t1.*
FROM Table AS t1
INNER JOIN
(
    SELECT MAX(SEQ_NO) MAXSeq
           , FILTER
           , VALUE
        FROM TABLE
    GROUP BY FILTER
           , VALUE
) t2  ON t1.SEQ_NO = t2.MAXSeq 
        AND t1.FILTER = t2.FILTER 
        AND t1.VALUE = t2.VALUE

Or using row_number : 或使用row_number

SELECT *
FROM
(
   SELECT *, 
     row_number() over(partition by FILTER, VALUE 
                       order by SEQ_NO desc) as rn
   FROM table
) t 
WHERE rn = 1

From Oracle 12C: 从Oracle 12C:

SELECT SEQ_NO
       , FILTER
       , VALUE
    FROM TABLE
 ORDER BY SEQ_NO DESC
FETCH FIRST 1 ROWS ONLY;

If I understand correctly, you want the top SEQ_NO per filter? 如果我理解正确,您是否想要每个过滤器的最高SEQ_NO?

i've created this in SQL Server and converted to Oracle 我已经在SQL Server中创建了此文件并转换为Oracle

SELECT  a.SEQ_NO,
        a.FILTER,
        a.VALUE
FROM    (
            SELECT  SEQ_NO,
                    FILTER,
                    VALUE,
                    MAX(SEQ_NO) OVER (PARTITION BY FILTER) m
            FROM    TABLE
        ) a
WHERE   SEQ_NO = m

Using mysql 使用mysql

SELECT SEQ_NO
       , VALUE
       , FILTER
    FROM TABLE
Order by SEQ_NO DESC LIMIT 1

You can use ROWNUM in oracle: 您可以在oracle中使用ROWNUM

select *
from  
  ( select * 
    from yourTable
    order by SEQ_NO desc )  as t
where ROWNUM = 1;

This should work 这应该工作

SELECT TOP 1 *
FROM TABLE
ORDER BY SEQ_NO DESC

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM