簡體   English   中英

SQL + JPA:返回單列最大值的行

[英]SQL + JPA : return rows with maximum value of single column

我的數據庫表數據如下所示:

col1                col2            col3                col4        col5        col6
value               null            null                blaDiff     0           x1  
value               null            null                blaDiff     0           x2  
value               null            blabla              null        1           x1  
value               null            blabla              null        1           x3  
value               bla             null                null        2           x1  
value               bla             null                null        2           x2  
value               otherBla        null                null        2           x3

我希望獲取具有最大值 col5 的行,但只獲取那些滿足過濾條件的行。我可以使用如下所示的查詢使其工作:

SELECT col1
    ,col5
    ,col6
FROM TABLE v
WHERE v.col1 = 'value'
    AND (
        v.col2 = 'bla'
        OR v.col3 = 'blabla'
        OR v.col4 = 'blaDiff'
        )
    AND v.col5 = (
        SELECT MAX(v.col5)
        FROM TABLE v1
        WHERE v1.col1 = 'value'
            AND (
                v.col2 = 'bla'
                OR v.col3 = 'blabla'
                OR v.col4 = 'blaDiff'
                )
        );

然后我的結果看起來像:

col1                col2            col3                col4        col5        col6
value               bla             null                null        2           x1  
value               bla             null                null        2           x2

我想知道的是是否有更好和更簡單的方法來做到這一點。 請注意,我在我的主題中提到了 JPA,因為之后我需要使用 JPA Criteria builder 編寫此邏輯。 所以我需要一些具有 JPA 2.0 支持的功能的解決方案。 我的數據庫是 Oracle 11g,JDK 版本是 1.7.051。

我傾向於使用窗口函數:

SELECT col1, col5, col6
FROM (SELECT v.*,
             MAX(col5) OVER (PARTITION BY col1) as max_col5
      FROM TABLE v
      WHERE v.col1 = 'value' AND
            (v.col2 = 'bla' OR v.col3 = 'blabla' OR v.col4 = 'blaDiff')
     ) v
WHERE v.col5 = v.max_col5;

暫無
暫無

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

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