从每个小组问题中获得最少的时间
Get Lowest Time From Each Group Issue
我正在尝试为每个组获取最短时间,但我无法使其正常工作,min()
功能似乎不起作用,只是 returns 第一个记录它为每个组找到。
我试过的查询:
SELECT
*,
MIN(TIME_TO_SEC(IF(LENGTH(`time`)<6,CONCAT('00:',`time`),`time`)))
FROM `test`
GROUP BY `number`;
时间字段/列需要采用 Varchar 格式!
预期结果:
1 - 59:09 - name3
2 - 48:02 - name2
伙计,你的方法是对的,只是需要稍微调整一下。
select t1.`number`, t1.`name`,t1.`time` from
(SELECT `number`,`name`,`time`,
TIME_TO_SEC(IF(LENGTH(`time`)<6,CONCAT('00:',`time`),`time`)) as `min`
FROM `test` GROUP BY `number`,`name`)t1
left join
(SELECT `number`,`name`,`time`,
TIME_TO_SEC(IF(LENGTH(`time`)<6,CONCAT('00:',`time`),`time`)) as `min`
FROM `test` GROUP BY `number`,`name`)t2
on t1.`number`=t2.`number` and t1.`min` > t2.`min`
where t2.`number` is null;
新的
select t1.`map`,t1.`record`,t1.`name` from
(select `map`,`record`,`name`,
replace(IF(LENGTH(`achieved`)<6,CONCAT('00:',`achieved`),`achieved`),':','') as mins
from `records` where `record` = 'speedrun') t1
inner join
(select `map`,
min(replace(IF(LENGTH(`achieved`)<6,CONCAT('00:',`achieved`),`achieved`),':','')) as mins
from `records`
where `record` = 'speedrun' group by `map`) t2
on t1.`map` = t2.`map` and t1.mins = t2.mins
我正在尝试为每个组获取最短时间,但我无法使其正常工作,min()
功能似乎不起作用,只是 returns 第一个记录它为每个组找到。
我试过的查询:
SELECT
*,
MIN(TIME_TO_SEC(IF(LENGTH(`time`)<6,CONCAT('00:',`time`),`time`)))
FROM `test`
GROUP BY `number`;
时间字段/列需要采用 Varchar 格式!
预期结果:
1 - 59:09 - name3
2 - 48:02 - name2
伙计,你的方法是对的,只是需要稍微调整一下。
select t1.`number`, t1.`name`,t1.`time` from
(SELECT `number`,`name`,`time`,
TIME_TO_SEC(IF(LENGTH(`time`)<6,CONCAT('00:',`time`),`time`)) as `min`
FROM `test` GROUP BY `number`,`name`)t1
left join
(SELECT `number`,`name`,`time`,
TIME_TO_SEC(IF(LENGTH(`time`)<6,CONCAT('00:',`time`),`time`)) as `min`
FROM `test` GROUP BY `number`,`name`)t2
on t1.`number`=t2.`number` and t1.`min` > t2.`min`
where t2.`number` is null;
新的
select t1.`map`,t1.`record`,t1.`name` from
(select `map`,`record`,`name`,
replace(IF(LENGTH(`achieved`)<6,CONCAT('00:',`achieved`),`achieved`),':','') as mins
from `records` where `record` = 'speedrun') t1
inner join
(select `map`,
min(replace(IF(LENGTH(`achieved`)<6,CONCAT('00:',`achieved`),`achieved`),':','')) as mins
from `records`
where `record` = 'speedrun' group by `map`) t2
on t1.`map` = t2.`map` and t1.mins = t2.mins