У меня есть одно время, пытаясь найти для него инструкцию HQL. Я пытаюсь получить последний статус всех заказов продукции в рамках группы, но не могу показаться, чтобы выяснить правильный синтаксис HQL, чтобы получить эту работу ...Получите последний столбец из таблицы, сгруппированный по другому столбцу в HQL
Пример таблицы:
id | created_at | group_id | purchase_id | status
---|------------|----------|-------------|------------
0 | 10 | 3 | 6 | DELIVERING
1 | 11 | 3 | 6 | DELIVERED
2 | 12 | 3 | 7 | DELIVERING
3 | 13 | 3 | 8 | DELIVERING
4 | 14 | 4 | 13 | DELIVERING
5 | 15 | 4 | 13 | DELIVERED
6 | 16 | 4 | 13 | LOST
7 | 17 | 5 | 17 | DELIVERING
Получите последние (по created_at
) каждого purchase_id
, где group_id
= 3. Если привести в этой таблице:
id | created_at | group_id | purchase_id | status
---|------------|----------|-------------|------------
1 | 11 | 3 | 6 | DELIVERED
2 | 12 | 3 | 7 | DELIVERING
3 | 13 | 3 | 8 | DELIVERING
Query, который работает в PostgreSQL:
SELECT DISTINCT ON (o.purchase_id) *
FROM orders o
WHERE o.group_id = 3
ORDER BY o.purchase_id, o.created_at DESC
Каким будет эквивалентный оператор HQL?
Извините, но я не в состоянии понять, как это становится самым последним в группировке 'purchase_id'? Я вижу, что вы используете тот факт, что последний будет иметь «наивысшее» значение 'created_at' (или самый высокий' id'), но не видит, как это все еще группируется 'purchase_id'. – justderb
Я обновил ответ. – krokodilko
Спасибо! Я использовал первый оператор HQL, но мне просто нужно было добавить 'AND o.group_id =?' После предложения WHERE ... IN() ', чтобы все работало! – justderb