首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询:选择max(A),如果存在多个max(A)记录,则使用MAX(pkey)

MySQL查询:选择max(A),如果存在多个max(A)记录,则使用MAX(pkey)
EN

Database Administration用户
提问于 2017-05-09 17:50:59
回答 2查看 1.1K关注 0票数 1

我一直在尝试用一个join来解决这个问题。有可能吗?

表:

代码语言:javascript
复制
pkey | uid | A | B | C
100  | 1   | 5 | 2 | 
101  | 1   | 5 | 3 | 'should find this'
102  | 1   | 4 | 6 | 
103  | 2   | 5 | 2 | 'should find this'
104  | 3   | 2 | 7 | 
105  | 3   | 1 | 1 | 
106  | 3   | 2 | 1 | 'should find this'

现在我需要选择带有pkey 101和103的记录。我使用这个查询来选择max(B)。

代码语言:javascript
复制
SELECT table.*
FROM (
     SELECT uid, max(A) as maxA
     FROM table
     GROUP BY uid
) as maxlog
JOIN table 
ON table.uid = maxlog.uid 
AND table.A = maxlog.maxA

它返回uid 1的两个记录(pkey 100和101)。如何在同一个查询中通过添加另一个联接对max(B)进行筛选?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2017-05-09 18:16:20

看起来您想要的是:对于每个uid,查找与AMAX(A)值相关联的MAX(pkey)

如果这是你想要的,试试这个:

代码语言:javascript
复制
SELECT table.*
FROM (
     SELECT uid, A, MAX(pkey) as pkey
     FROM table t
     WHERE A = (SELECT MAX(A) FROM table WHERE uid = t.uid)
     GROUP BY uid, A
) as maxlog
JOIN table 
ON maxlog.pkey = table.pkey

注意,虽然这在技术上只有一个JOIN,但这实际上只是语义--实际上,SELECT MAX(A)子查询实际上是一个JOIN (如果这样写的话,性能可能会更好)。

票数 0
EN

Database Administration用户

发布于 2017-05-09 18:17:32

您可以不使用GROUP BY,而可以使用子查询ORDER BY A DESC, pkey DESCLIMIT对两个记录使用结果:

代码语言:javascript
复制
select t1.pkey, t1.uid, t1.A, t1.B, t1.C
from mytable t1
inner join (select   pkey, a
            from     mytable
            order by a desc, pkey desc
            limit 2) t2
on t1.pkey = t2.pkey
;

其结果是:

代码语言:javascript
复制
| pkey | uid | A | B | C                |
|------|-----|---|---|------------------|
| 101  | 1   | 5 | 3 | should find this |
| 103  | 2   | 5 | 2 | should find this |

Rextester 这里

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/173116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档