繁体   English   中英

选择在指定列中具有最高值的行,而在其他列中不具有唯一值的行应该是不同的

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM