Хотелось бы узнать, есть ли способ получить первое и последнее значение данных, сгруппированных по дате, используя Eloquent Laravel.
Мне нужно, чтобы данные были помещены на свечную диаграмму TradingView, и для этого нужно определенное форматирование, как показано ниже:
{
t:'unix timestamps',
v:'volumes',
h:'higher prices',
l:'lower prices',
o:'open prices',
c:'close prices'
}
Мой код:
$trans = Transacoes::where('created_at', '>=', $end->subMinutes($minute))
->groupBy('t')
->orderBy('t', 'DESC')
->get([
DB::raw('DATE_FORMAT(created_at, "%Y-%m-%d %H:%i") as t'),
DB::raw('sum(amount) as "v"'),
DB::raw('max(`price`) as h'),
DB::raw('min(`price`) as l'),
DB::raw('first(`price`) as o'),
DB::raw('last(`price`) as c'),
])
->toArray();
Я знаю, что функции first()
и last()
не существуют для MySQL, но я написал так, чтобы было легче понять, что я пытаюсь сделать.
Мой массив в настоящее время возвращает:
{
"t": "2018-11-13 12:20",
"v" : "0.04536078",
"h" : "24249.98",
"l": "24249.97"
},
{...},
Мне нужно было включить цену открытия и цену закрытия для каждого из массивов, например: в минуту, соответствующую 12:20, было 4 транзакции, мне нужно знать, какая была первой, а какая - последний в эту минуту и включает его в каждый элемент массива с индексами "o" и "c"