SQL:reverse-groupby:EDIT

SQL:reverse-groupby:EDIT,sql,group-by,eloquent,Sql,Group By,Eloquent,sql中是否有内置函数,以反转groupby的工作顺序?我尝试按某个键分组,但我希望返回最后一条插入的记录,而不是第一条插入的记录 使用orderby更改订单不会影响此行为 先走一步 编辑: 以下是示例数据: id|value ----- 1 | A 2 | B 3 | B 4 | C 作为回报,我想要 1 | A 3 | B 4 | C 不是 使用group by id时,不会得到我想要的结果。使用Max()作为id的聚合函数: SELECT max(id), value FROM <

sql中是否有内置函数,以反转groupby的工作顺序?我尝试按某个键分组,但我希望返回最后一条插入的记录,而不是第一条插入的记录

使用orderby更改订单不会影响此行为

先走一步

编辑:

以下是示例数据:

id|value
-----
1 | A
2 | B
3 | B
4 | C
作为回报,我想要

1 | A
3 | B
4 | C
不是

使用group by id时,不会得到我想要的结果。

使用Max()作为
id的聚合函数:

SELECT max(id), value FROM <table> GROUP BY value;
至于“雄辩的”
,我没有用过,但我认为它看起来像:

$myData = DB::table('yourtable')
                 ->select('value', DB::raw('max(id) as maxid'))
                 ->groupBy('value')
                 ->get();

这里的问题是您如何识别上次插入的行。根据您的示例,它看起来像是基于
id
。如果
id
是自动生成的,或者是一个序列,那么您肯定可以这样做

select max(id),value
from your_table
group by value 

理想情况下,在表格设计中,人们使用一个日期列来保存插入特定记录的时间,因此很容易根据该日期进行排序。

请向我们展示一些示例数据,说明您的问题。请提供示例数据和预期结果。我不清楚这个问题,样本数据有助于澄清。在我看来,您希望在日期上有一个最大值,或者您希望选择最大值(插入),ID group by ID,然后连接回基本集以获取每个组的最新记录?
group by
不返回“样本”记录。您应该具有适当的聚合函数来获取所需的值。如果您真正需要的是查询的最后一行,则LAG函数将返回查询的最后一行,但您的问题非常不清楚。按w/o聚合分组确实没有意义。此时您没有聚合。您真正需要分组依据的唯一时间是在使用min/max/avg等时。。。如果你有重复的记录要处理,我会使用distinct使意思变得简单。我如何将其转换为“雄辩”?
$myData = DB::table('yourtable')
                 ->select('value', DB::raw('max(id) as maxid'))
                 ->groupBy('value')
                 ->get();
select max(id),value
from your_table
group by value