A16s表
id p_id u_id time
1 1 2 0
2 1 1 1
3 1 5 2
4 1 6 3
5 1 7 4
6 2 2 2
7 2 3 1
8 2 1 0
9 3 2 11
10 3 4 8
11 3 8 15
我想从每个组中按时间获取前两个数据orderby
p_id u_id time
1 2 0
1 1 1
2 1 0
2 3 1
3 4 8
3 2 11
我试试查询
$result = DB::table('a16s')
->select ('p_id','u_id','time'))
->orderBy('time', 'desc')
->groupBy('p_id')
->get();
echo '<pre>' ;
print_r($result);
我得到了错误SQLSTATE[42000]:语法错误或访问冲突:SELECT list的1055表达式#2不在GROUP BY子句中,并且包含未聚合的列。。。
我可以使用Groupby两次吗?我想把这个结果用在jQuery的数据上。
从数据库
id p_id u_id approve time
1 1 1 1 1
2 1 2 1 2
3 1 3 1 3
4 1 4 0 4
5 1 5 0 5
6 2 1 0 1
7 2 2 1 2
8 2 5 0 3
9 2 6 0 4
10 3 2 1 1
11 3 5 1 2
12 3 8 1 3
使用这个技巧:
$join = DB::table('a16s')->select('p_id')
->selectRaw('GROUP_CONCAT(time ORDER BY time ASC) times')->groupBy('p_id');
$sql = '(' . $join->toSql() . ') latest';
$result = DB::table('a16s')
->select('a16s.*')
->join(DB::raw($sql), function($join) {
$join->on('a16s.p_id','=','latest.p_id');
$join->whereBetween(DB::raw('FIND_IN_SET(`a16s`.`time`, `latest`.`times`)'), [1, 2]);
})
->get();
在您的SQL版本中,u_id
要么需要被排除在选择之外,要么添加到GROUP BY
子句中。
有关更多信息,请参阅此MySql文档。
试试这个
$result = DB::table('a16s')
->select('p_id', 'u_id', 'time')
->orderBy('time', 'desc')
->get()
->groupBy('p_id')
->map(function ($deal) {
return $deal->take(2);
});
问题内容: 例 问题,如何获得单一值,例如: 问题答案: 查看您的中的键和缩进: …等等
问题内容: 我正在使用Javascript(ES6)/ FaceBook进行反应,并尝试获取大小变化的数组的前3个元素。我想做相当于Linq take(n)。 在我的Jsx文件中,我有以下内容: 然后得到我尝试的前三个项目 这不起作用,因为地图没有设置功能。 你能帮忙吗? 问题答案: 我相信您正在寻找的是:
问题内容: 我想获得表中每个记录的最小日期,该记录具有一个主键的多个日期条目。看看我的桌子: 我想要这样的结果: 我想获取每个CaseNo的最短日期记录在我的桌子上。 我尝试了这段代码: 结果是这样的: 该代码删除没有最小日期的行。我想显示所有记录的最小日期为Min_date。 问题答案: 试试这个
所以我有一个帖子集。在“post”集合中,我有另一个名为“likes”的集合。 所以我想同时从每个文档中获取每个集合,并在之后映射它们。有没有办法做到这一点? 因为在Firebase中,您只能从一个文档中获取集合,但我想从每个文档中获取每个集合。
基本上我有一个数组如下所示: 用什么方法来计算重复次数最多的动作以及它重复了多少次?关键字“when”无关紧要。