![](/img/trans.png)
[英]MySQL select unique rows in two columns with the highest value in one column
[英]Select rows with highest value in a specified column and not unique values in other column should be distinct
我有一個餐桌活動 :
id last_active login ip 1 1000 user1 192.168.10.10 2 2000 user2 192.168.10.20 3 3000 user3 192.168.10.30 4 4000 user1 192.168.10.10 5 5000 user2 192.168.10.20 6 6000 user2 192.168.10.20 7 7000 user1 192.168.10.10
我必須連續選擇所有ip和其他數據,但僅在last_active為最高的位置。 因此結果應為:
3 3000 user3 192.168.10.30 6 6000 user2 192.168.10.20 7 7000 user1 192.168.10.10
我已經嘗試過使用:
ORM::factory('Activity')->order_by('last_active','DESC')->group_by('ip')->find_all();
結果是:
array(4) ( "id" => string(1) "3" "last_active" => string(4) "3000" "login" => string(5) "user3" "ip" => string(13) "192.168.10.30" ) array(4) ( "id" => string(1) "2" "last_active" => string(4) "2000" "login" => string(5) "user2" "ip" => string(13) "192.168.10.20" ) array(4) ( "id" => string(1) "1" "last_active" => string(4) "1000" "login" => string(5) "user1" "ip" => string(13) "192.168.10.10" )
如您所見,我有不同的ip,但是last_active值不正確。 任何想法? 純SQL語句或DB :: select()答案是可以的:-)
怎么樣
select id, last_active, login, ip
from activities
where (last_active, ip) in (select max(last_active), ip from activities group by ip )
使用DB :: expr() 。 類似於以下內容的東西應該起作用:
ORM::factory('Activity')
->where(
DB::expr(
'`last_active`,`ip`'
),
'IN',
DB::expr(
'select max(`last_active`), `ip` from `activities` group by `ip`'
)
->find_all();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.