Перенос запроса SQL через RestApi

Новичок. Есть Entity з полями id, date, amount, currency, product (Типа контроль своих расходов - дата покупки, сума, валюта и продукт). Мне нужно, чтоб в ендпойнте групировалось по отсортированной дате. То есть, получить JSon типа

“2021-04-27”: [
{
“2021-04-22”: [
{
“id”: 2,
“date”: “2021-04-22”,
“amount”: 12,
“currency”: “USD”,
“product”: “Salmon”
}
],
“2021-04-27”: [
{
“id”: 4,
“date”: “2021-04-27”,
“amount”: 4.75,
“currency”: “EUR”,
“product”: “Beer”
}

Пробую делать через Sql запрос -

SELECT JSON_OBJECTAGG( date, grp ) AS json FROM ( SELECT date, JSON_ARRAYAGG( JSON_OBJECT( "product", product, "id", id ) ) AS grp FROM expense GROUP BY date ) AS tmp 
ORDER BY date

. Через аннотацию Querry все время выбивает ошибку, что ip отсутствует. Подскажите пожалуйста (только примером кода), как реализовать этот запрос (через DAO, RestService, RestService и RestController? Ниже Entity.

 - @Entity
public class Expense {

    

    @Id
        @Column(nullable = false, updatable = false)
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private long id;    
        private LocalDate date;
        private Double amount;
        private String currency;
        private String product;

Таблица SQL:

use expenses 

create table expenses ( id int NOT NULL AUTO_INCREMENT, DATE date , AMOUNT DOUBLE, CURENCY DOUBLE, PRODUCT varchar (45) )

Insert:

INSERT INTO expense(date, amount, currency, product) 
VALUES 
('2021-04-22', 12, 'USD', 'Salmon'), 
('2021-04-27', 4.75, 'EUR', 'beer')

Результат:

Результат:

localhost:8080/expenses

"2021-04-22": 
   [ { "id": 2, "date": "2021-04-22", 
"amount": 12, 
"currency": "USD", 
"product": "Salmon" }],
 "2021-04-27": 
   [ { "id": 4, 
   "date": "2021-04-27", "amount": 4.75, 
  "currency": "EUR", 
   "product": "Beer" } 

 

Ответы (1 шт):

Автор решения: Akina
SELECT JSON_OBJECTAGG(`date`, JSON_ARRAY(JSON_OBJECT('id', id, 
                                                     'date', `date`, 
                                                     'amount', amount,
                                                     'currency', currency,
                                                     'product', product))) result
FROM expenses

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=50254f3c4a0a96ce75aa09a7e11afa6a

→ Ссылка