我有一个Sessions表。每个会话都有“session_start_time”和“session_end_time”。会话打开时,结束时间为空。我想获取会话列表,并按以下逻辑对其进行排序:
类似的东西:
ORDER BY (session_end_time == null) ? session_start_time : session_end_time
我正在使用JPA和JPQL进行查询,并使用Hibernate执行。你会推荐什么?
注意:我不想将CASE添加到SELECT中,而是将其保持清洁,以便获得没有其他不需要的字段的会话列表。
答案 0 :(得分:1)
确实
ORDER BY CASE
WHEN session_end_time IS NULL THEN session_start_time
ELSE session_end_time
END
在您的DBMS中工作?这不会添加字段。
否则,您可以在嵌套查询中计算它,但不要将其包含在最终的SELECT
子句中:
SELECT field1, field2 FROM (
SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield
答案 1 :(得分:1)
ORDER BY nvl(session_end_time,session_start_time)
nvl是一个Oracle函数。我确信其他DBMS的功能类似于
发现这个用于休眠: nIBl in HIBERNATE:How to simulate NVL in HQL
ORDER BY:https://forum.hibernate.org/viewtopic.php?f=25&t=997220&start=0