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 ...