簡體   English   中英

根據特定字段中的最大值將MAX()結果限制為一行

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

當然,我的數據集更為復雜,但這實際上是我擁有的:

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

這是我的查詢:

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

這將返回我的整個數據集。 如何更改查詢,使其僅返回具有最高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

或使用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

從Oracle 12C:

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

如果我理解正確,您是否想要每個過濾器的最高SEQ_NO?

我已經在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

使用mysql

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

您可以在oracle中使用ROWNUM

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

這應該工作

SELECT TOP 1 *
FROM TABLE
ORDER BY SEQ_NO DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM