如何解决MySQL获得某个用户的最低ID-或-每行紧急度最高的条目的ID
我有以下数据库id | user | urgency | problem | solved
那里的信息有不同的用户,但是这些用户都有多个条目
1 | marco | 0 | MysqL problem | n
2 | marco | 0 | Email problem | n
3 | eddy | 0 | Email problem | n
4 | eddy | 1 | MTV doesn\'t work | n
5 | frank | 0 | out of coffee | y
我想做的是:通常我会先检查每个人的最老的问题。我使用此查询来获取最早的问题的ID。
select min(id) from db group by user
这列出了最早的问题ID。但是我希望人们能够使某些问题更加紧急。我想要每个用户的紧急程度最高的ID,或紧急程度最高的问题的ID
获取最大紧急程度不会给出问题的ID,而是最大紧急程度。
要明确:我想得到这个结果
row | id
0 | 1
1 | 4
自从解决后,最后一个条目应该出现在结果中解决方法
Select ...
From SomeTable As T
Join (
Select T1.User,Min( T1.Id ) As Id
From SomeTable As T1
Join (
Select T2.User,Max( T2.Urgency ) As Urgency
From SomeTable As T2
Where T2.Solved = \'n\'
Group By T2.User
) As MaxUrgency
On MaxUrgency.User = T1.User
And MaxUrgency.Urgency = T1.Urgency
Where T1.Solved = \'n\'
Group By T1.User
) As Z
On Z.User = T.User
And Z.Id = T.Id
,有很多深奥的方法可以做到这一点,但这是更清晰的方法之一。
首先建立查询,获取您的最小编号和最大紧急度:
SELECT
user,MIN(id) AS min_id,MAX(urgency) AS max_urgency
FROM
db
GROUP BY
user
然后将其作为逻辑表并入
更大的查询您的答案:
SELECT
user,min_id,max_urgency,( SELECT MIN(id) FROM db
WHERE user = a.user
AND urgency = a.max_urgency
) AS max_urgency_min_id
FROM
(
SELECT
user,MAX(urgency) AS max_urgency
FROM
db
GROUP BY
user
) AS a
给定明显的索引,这应该非常有效。,以下内容将使您准确返回单行–表中最紧急,最古老的问题。
select id from my_table where id = (
select min(id) from my_table where urgency = (
select max(urgency) from my_table
)
)
我将建议向您的表中添加一个create_date列,这样您就可以针对相同紧急度的那些问题首先获得最早的问题。但我现在假设您为此目的使用了最低的ID。
但是现在我看到您想要其中的一个列表。为此,您可以按ID对结果进行排序:
select id from my_table where urgency = (
select max(urgency) from my_table
) order by id;
[编辑:省略订单!]
老实说,我忘记了如何获取行号。互联网上的某人提出了类似的建议,但不知道是否可行:
select @rownum:=@rownum+1 ‘row\',id from my_table where ...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。