Search code examples
oracle-databasejpaeclipselinkjpql

JPQL query with having oracle db


I am using jpql jpa eclipselink Following query wont work :

SELECT c FROM TableA c WHERE c.forumId = :forumId AND c.isDefault = true HAVING MAX (c.validFrom)

The error im getting "The expression is not a valid conditional expression"


Solution

  • The HAVING clause only works with a GROUP BY expression.

    The HAVING clause allows for the results of a GROUP BY to be filtered.

    Your question is:

    i want o get max validFrom how can i make expression ot of this

    But you can make a query without GROUP BY and HAVING to do what you want:

    select c from TableA c WHERE c.validFrom = (
        SELECT MAX(c2.validFrom) 
        FROM TableA c2  
        WHERE c2.Id = c.Id AND c.forumId = :forumId AND c.isDefault = true
    )
    

    If you would like to use GROUP BY and HAVING, you can do:

    SELECT c FROM TableA c WHERE c.validFROM = (
        SELECT MAX(validFROM) 
            FROM TableA 
            WHERE forumId = :forumId AND isDefault = true
            GROUP BY validFROM
            HAVING validFROM=c.validFROM
    )