我有一个包含4列的表格:place_id
,username
,counter
,last_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');
答案 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");