我尝试了什么,哪些会返回不正确的数据:
SELECT type, pid, MAX(distance) FROM table GROUP BY type
这将从我的数据库中检索每个唯一type
和每个distance
的相应最大type
(总共有26个不同的唯一type
值,这将是永远不会改变),但pid
值不正确。如何检索正确且对应的pid
值?
示例表数据:
pid | type | distance | ...
675 | dcj | 273060192 | ...
743 | mcj | 273046176 | ...
284 | dcj | 271592224 | ...
4091 | lj | 255217488 | ...
743 | lj | 255170160 | ...
4091 | lj | 230840928 | ...
应该返回什么:
pid | type | distance
675 | dcj | 273060192
743 | mcj | 273046176
4091 | lj | 255217488
有关数据的一些值得注意的信息:
每pid
个值有多个条目,每个pid
值可能有多个条目具有相同的type
值。
我是否需要利用PHP来运行两个不同的查询,其中第一个查询通过type
获取26个不同的GROUP BY type
值,第二个查询执行26个不同的时间(每个唯一{{1通过类似type
之类的内容查找每个type
的最大值?或者这可以在一个SQL查询中完成吗?
答案 0 :(得分:2)
此查询提供所需的结果。
SELECT t.type, t.pid, t.distance
FROM table t
INNER JOIN (SELECT type, MAX(distance) as distance FROM table GROUP BY type) as m
ON t.type = m.type and t.distance = m.distance
ORDER BY t.type
对于两个或更多pid具有相同最大距离的(非常可能的)情况,它将返回具有相同最大距离的所有pid。
答案 1 :(得分:1)
您可以执行GROUP BY
查询,然后将其加入原始表格以获得正确的pid
,如下所示:
SELECT x.type, t.pid, x.max_dist
FROM (
SELECT type, MAX(distance) as max_dist FROM table GROUP BY type
) as x
JOIN table t ON x.max_dist=t.distance AND x.type=t.type
答案 2 :(得分:0)
使用公用表表达式也可以这样做:
;
WITH cte
AS ( SELECT pid,
type,
distance,
ROW_NUMBER() OVER ( PARTITION BY pid ORDER BY distance DESC ) AS RowNum
FROM table_name
)
SELECT pid,
type,
distance
FROM cte
WHERE RowNum = 1