2017-03-04 54 views
0

我有一個看起來像這樣的數據庫:相當於mysql/laravel中的限定語句嗎?

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的的然後likesdescending順序訂購。我正在使用laravel 5.4mysql作爲數據庫。在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 
+1

沒有等同於'qualify'因爲沒有窗函數。我可能會建議你問另一個問題,包括teradata查詢(或簡化版本),並詢問如何在MySQL中編寫它。 –

+0

嘗試: 數據庫::選擇( 'facebook_id', '喜歡', 'created_at') - >排序依據( '喜歡', '降序') - >獲得() - >獨特的( 'facebook_id') ; – Nevermore

回答

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; 
0

我想你只需要在一個facebook_idgroupBy查詢

->groupBy('facebook_id')