我有下表
订单表
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';