我设置了以下数据库格式:
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
我想知道是否有办法只使用一个数据库和其他一些查询语法来完成这项工作?
感谢。
答案 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`
答案 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 |