帮助MySQL查询,选择最大元素

时间:2010-07-20 07:55:21

标签: php sql mysql

我有一个包含4列的表格:place_idusernamecounterlast_checkin

我正在编写一个基于签入的系统,我正在尝试获得一个查询,这将给我每个地方的“市长”。市长是签到次数最多的市长,如果超过最小last_checkin则超过1。

例如,如果我有:

place_id, username, counter, last_checkin
 123,     tom,       3 ,      13/4/10
 123,     jill,      3,       14/4/10
 365,     bob,       2,       15/4/10
 365,     alice,     1,       13/4/10

我希望结果是:

123, tom
365, bob

我在PHP代码中使用它


以下是测试数据:

CREATE TABLE `my_table` ( `place_id` int(11), `username` varchar(50), `counter` int(11), `last_checkin` date);
INSERT INTO `my_table` VALUES (123,'tom',3,'2010-04-13'),(123,'jill',3,'2010-04-14'),(365,'bob',2,'2010-04-15'),(365,'alice',1,'2010-04-13');

3 个答案:

答案 0 :(得分:2)

怎么样..

SELECT
    place_id,
    (SELECT username
         FROM my_table MT2
         WHERE MT2.place_id = MT1.place_id
         ORDER BY counter DESC, last_checkin ASC
         LIMIT 1) AS mayor
    FROM my_table MT1
    GROUP BY place_id;

编辑为Unreason建议对last_checkin进行升序。

答案 1 :(得分:2)

Brian的相关查询是我要写的。但是我找到了这个different take,根据数据的不同,它可能会有不同的表现

SELECT
    mt1.place_id,
    mt1.username
FROM 
    my_table mt1 LEFT JOIN my_table mt2 
        ON mt1.place_id = mt2.place_id AND
           (mt1.counter < mt2.counter OR 
            (mt1.counter = mt2.counter AND mt1.last_checkin > mt2.last_checkin)
           )
WHERE 
    mt2.place_id IS NULL

根据特定条件使用左连接来获取最高记录。

答案 2 :(得分:-2)

$data = query("SELECT max(counter) counter,username FROM table GROUP By place_id ORDER By last_checkin DESC");