使用雄辩,试图找到一种方法,以获得每一行的最新行分组: exchange,base,引号
数据
exchange base quote price value created_at
bittrex BTC USD 10000 10000 2018-01-05
bittrex BTC USD 9000 9000 2018-01-01
poloniex BTC USD 10001 10001 2018-01-05
poloniex BTC USD 9000 9000 2018-01-01
binance BTC USD 10002 10002 2018-01-05
binance BTC USD 9000 9000 2018-01-01
binance ETH USD 800 800 2018-01-05
binance ETH USD 700 700 2018-01-01结果:
bittrex BTC USD 10000 10000 2018-01-05
poloniex BTC USD 10001 10001 2018-01-05
binance BTC USD 10002 10002 2018-01-05
binance ETH USD 800 800 2018-01-05更新
我使用了@Cryode解决方案,它是原始SQL,而不是雄辩的SQL(如果有人可以提出一个雄辩的查询来复制下面查询的结果,请随意发布)。
我还更改了表的结构,以添加id (增量)作为主键。我还添加了以下索引$table->index(['exchange', 'base', 'quote', 'created_at']);
以下是解决办法:
$currencies = DB::select('SELECT *
FROM (
SELECT DISTINCT exchange, base, quote
FROM tickers
) AS t1
JOIN tickers
ON tickers.id =
(
SELECT id
FROM tickers AS t2
WHERE t2.exchange = t1.exchange
AND t2.base = t1.base
AND t2.quote = t1.quote
ORDER BY created_at DESC
LIMIT 1
)
');谢谢
发布于 2018-02-24 08:09:06
可以将多个参数传递给groupBy方法,以按多列分组。
请参阅https://laravel.com/docs/5.6/queries#ordering-grouping-limit-and-offset文档
$users = DB::table('users')
->groupBy('first_name', 'status')
->having('account_id', '>', 100)
->get();https://stackoverflow.com/questions/48958737
复制相似问题