我有一个如下所示的数据库:
ID | facebook_id | likes | created_at
--------------------------------------------------
1 | x | 100 | 2017-01-01 12:10:15
2 | x | 110 | 2017-01-02 12:10:15
3 | y | 115 | 2017-01-01 12:10:15
4 | y | 120 | 2017-01-02 12:10:15
5 | z | 200 | 2017-01-01 12:10:15
6 | z | 201 | 2017-01-01 12:10:15
7 | z | 200 | 2017-02-02 12:10:15
8 | z | 205 | 2017-02-03 12:10:15
9 | z | 250 | 2017-03-04 12:10:15
我希望获得表格中每个唯一facebook_id
的最新记录,然后按likes
按descending
顺序排序。我正在使用laravel 5.4和mysql作为数据库。在teradata我会做类似
QUALIFY ROW_NUMBER() OVER(PARTITION BY facebook_id ORDER BY created_at DESC) = 1
按facebook_id
排序结果,并按唯一的facebook_id获取最新一行。但是我不确定如何在laravel / mysql中执行此操作。
我试过了
Database::select('facebook_id', 'likes', 'created_at')
->orderBy('likes', 'desc')
->distinct('facebook_id')
->latest('created_at')
->limit(20)
->get();
但它只是按likes
订购,并没有让我独一无二facebook_id
我的结果是:
Top Profile ID: z Likes:250
Top Profile ID: z Likes:205
Top Profile ID: z Likes:201
Top Profile ID: z Likes:200
我想得到的是:
Top Profile ID: z Likes:250
Top Profile ID: y Likes:120
Top Profile ID: x Likes:110
答案 0 :(得分:0)
这个问题:
我想获得每个独特的facebook_id的最新记录 在表格中,然后按降序排列。
有答案。有多种方法。这是一个:
select t.*
from t
where t.created_at = (select max(t2.create_at)
from t t2
where t2.facebook_id = t.facebook_id
)
order by t.likes desc;
答案 1 :(得分:0)
我认为您在查询groupBy
上只需要facebook_id
->groupBy('facebook_id')