MySQL @grouping按ID结果并按分数“问题排序

时间:2014-05-15 11:57:52

标签: php mysql sql sorting

我设置了以下数据库格式:

id  fid     name    time    flag
1   224     Mike    112     3
2   555     John    98      5
3   224     Mike    101     0
4   121     Ann     80      1
5   224     Mike    55      7
6   121     Ann     150     4

我使用以下查询对它们进行排序和显示,按fid(或名称)分组并按最短时间对它们进行排序:

SELECT id, fid, name, MIN(time), flag FROM dblist GROUP BY name ORDER BY MIN(time)

这很正常,因为我按照我想要的顺序得到了输出。类似的东西:

name    time
Mike    55
Ann     80
John    98

但是,如果我尝试显示fid,flag或与该特定时间记录关联的任何其他字段,我会得到一些其他值(可能首先是查询遇到的)。

我想得到的是以下格式:

id  fid     name    time    flag
5   224     Mike    55      7
4   121     Ann     80      1
2   555     John    98      5

我想知道是否有办法只使用一个数据库和其他一些查询语法来完成这项工作?

感谢。

3 个答案:

答案 0 :(得分:1)

在两个条件1上使用自联接,名称和每个名称的最小时间分数,按结果分组是不确定的,他们的订单不能保证最新或组中的第一个记录

select t.* from t
join (SELECT name, MIN(`time`) `time`
 FROM t GROUP BY name) t1
on(t.name = t1.name and t.`time`=t1.`time`)
order by t.`time` 

Demo

答案 1 :(得分:1)

使用此请求

SELECT
    id,
    fid, 
    name, 
    MIN(time), 
    flag 
FROM 
    dblist 
GROUP BY
    id, 
    fid, 
    name 
ORDER BY 
    MIN(time)

答案 2 :(得分:1)

查询:

<强> SQLFIDDLEExample

SELECT t.id, 
       t.fid, 
       t.name, 
       t.time, 
       t.flag
FROM t t
  LEFT JOIN t t1
    ON t.fid = t1.fid
    AND t.time > t1.time
WHERE t1.time is null

结果:

| ID | FID | NAME | TIME | FLAG |
|----|-----|------|------|------|
|  2 | 555 | John |   98 |    5 |
|  4 | 121 |  Ann |   80 |    1 |
|  5 | 224 | Mike |   55 |    7 |