java - 将 SQL 原生查询转换为 HQL 查询
问题描述
我有下表
订单表
OrderId UserId status orderDate
1 101 In-Progress 30/08/20
2 101 Completed 28/08/20
3 101 Validating 28/08/20
4 102 In-Progress 02/09/20
5 102 Completed 28/08/20
6 102 In-Progress 10/09/20
7 103 In-Progress 12/09/20
8 103 In-Progress 15/09/20
我正在寻找输出
- 所有处于“进行中”状态的订单。
- 对于相同的用户 ID,没有任何订单状态处于“验证中”。
- 具有较早 orderDate 的订单
在上述条件下,o/p 将如下所示:
OrderId UserId status orderDate
4 102 In-Progress 02/09/20
7 103 In-Progress 12/09/20
为了实现这一点,我在本机查询下面写了我想转换为 HQL 的内容。或任何简单的 HQL 查询来实现这一点?
SELECT
t1.*
FROM
(SELECT
UserId, MIN(orderDate) AS date
FROM
Order
GROUP BY UserId) t2
INNER JOIN
Order t1 ON t1.UserId = t2.UserId
AND t1.orderDate = t2.date
AND t1.UserId NOT IN (SELECT
UserId
FROM
Order
WHERE
status IN ('Validating'))
AND t1.status = 'In-Progress';
解决方案
尝试这个:
SELECT o1.*
FROM Orders o1
WHERE o1.status = 'In-Progress'
NOT EXISTS
(SELECT 1
FROM Orders o2
WHERE o2.UserId = o1.UserId
AND o2.status = 'Validating')
AND EXISTS
(SELECT 1
FROM Orders o3
WHERE o3.UserId = o1.UserId
AND o3.orderDate > o1.orderDate)
使用第一个NOT EXISTS
,您排除所有订单具有相同用户的其他订单,状态为“正在验证”
对于第二个EXISTS
,您考虑存在下一个订单日期的订单(对于同一用户)
我已经命名了 Java 对象 Orders,以防止关键字 order oforder by
子句出现错误
推荐阅读
- algorithm - 组织矩阵以使邻居最近的算法
- graphql - 使用 GraphQL 触发嵌套解析器
- android - 调用 Firebase 函数,但 .doc() 之后的 func 方法 .set() 不起作用
- containers - 哪个 Gtk 容器信号检测到鼠标指针位于小部件顶部?
- rdf - 在 RDF 三元组中添加多个对象值
- php - 为什么在ajax请求后没有加载`head`文件
- javascript - 实时搜索过滤器
- unicode - Unicode 组合笔画字符的高度错误?
- c# - 我的更新按钮的正确语法是什么?
- angular-material - 加载页面时数组为 []