╔════╦═══════╦═══════╦═══════╗
║ id ║ Col A ║ Col B ║ Col C ║
╠════╬═══════╬═══════╬═══════╣
║ 1 ║ 36 ║ 50 ║ AAA ║
║ 2 ║ 36 ║ 50 ║ BBB ║
║ 3 ║ 36 ║ 44 ║ CCC ║
║ 4 ║ 36 ║ 44 ║ DDD ║
║ 5 ║ 56 ║ 33 ║ EEE ║
║ 6 ║ 56 ║ 78 ║ FFF ║
╚════╩═══════╩═══════╩═══════╝
如何使用laravel查询生成器来获取表行,其中“ Col B”中的最高编号和“ Col A”中的相同值?
最后,我希望得到如下结果:
╔════╦═══════╦═══════╦═══════╗
║ id ║ Col A ║ Col B ║ Col C ║
╠════╬═══════╬═══════╬═══════╣
║ 1 ║ 36 ║ 50 ║ AAA ║
║ 2 ║ 36 ║ 50 ║ BBB ║
║ 6 ║ 56 ║ 78 ║ FFF ║
╚════╩═══════╩═══════╩═══════╝
获得这些行的原因是,在“ Col A”中有两个数字36和56。“ Col B”中的最高数字是36的50,而“ Col B”中的最高数字是56的78。
答案 0 :(得分:1)
以下是满足您要求的SQL查询:
SELECT * FROM `test` WHERE col_b in (SELECT MAX(col_b) from test GROUP BY col_a);
将test
作为表名,col_a
和col_b
分别作为Col A和Col B。
以下是上述查询的Laravel查询构建器版本:
Test::select('*')
->whereIn('col_b', function($query)
{
$query->from('test')->select(DB::raw("MAX(col_b)"))->groupBy('col_a');
})->get();
希望它对您有用。 :)
答案 1 :(得分:0)
我不确定您是否需要Laravel Query Builder或开发查询逻辑方面的帮助。这是将在SQL Server中运行的查询逻辑。这些概念适用于所有RDBMS。
select a.id
, a.[Col A]
, a.[Col B]
, a.[Col C]
from TblA a
inner join (
select [Col A]
, max([Col B]) as 'Col B'
from TblA
group by [Col A]
) b on b.[Col A] = a.[Col A]
and b.[Col B] = a.[Col B]
然后,您可以使用正确的答案from another post将其转换为可在Laravel Query Builder中使用。
答案 2 :(得分:0)