按名称desc分组 - 获取分组名称的最后输入值

时间:2017-08-24 14:22:43

标签: mysql tsql

我有一张这样的表:

id | name | v (lvl)
11 | Jane | 6
12 | John | 5
13 | Jane | 6
14 | John | 5
15 | Jane | 7
16 | Jane | 5 

在我的自动填充表单中,现在ID就像对名称进行分组,但获取最后一个值(具有最大ID的值)。在上面的例子中将是

Jane | 5

我尝试使用像distinct,group by,order by这样的组合。但我总是得到

Jane | 6 

或像这样分组并反转:

Jane | 6 
Jane | 7 
Jane | 5 

我需要这样的东西:

SELECT name,lvl FROM
(
SELECT DISTINCT name, lvl FROM pora WHERE name LIKE 'Jane' ORDER BY lvl DESC
)
GROUP BY name
编辑:我不会获得最高级别的lvl,我希望获得最高级别的lvl,按名称分组。就这样。我上面的例子将是我最喜欢的解释 在内部查询中,我将所有订单更改为DESC,而在外部i中将其更改为名称。但是我得到了一个错误。

编辑2 我终于完成了自己的工作。正确的解决方案(我已经很接近):

SELECT a.name, a.lvl FROM
(
SELECT DISTINCT name, lvl FROM pora WHERE name LIKE 'Jane' ORDER BY id DESC
)as a
GROUP BY name

3 个答案:

答案 0 :(得分:2)

没有LIKE

%只是=

SELECT *
FROM yourTable
WHERE name = 'Jane'
ORDER BY id DESC
LIMIT 1

但是因为你提到了自动完成功能,你应该使用:

WHERE name LIKE 'Jane%'

答案 1 :(得分:2)

要拥有最新版本,您需要有一个字段dateAdded,它存储您运行insert命令的日期。

之后,您使用MAX(dateAdded)获取最新的ID(因为,正如您所提到的,它也可能会减少)

<强>更新

如果ID没有减少,您可以随时使用MAX(ID)

SELECT MAX(id), v from tablename where name = 'Jane'

<强>更新

已经过测试:
SELECT ID, v from tableName where ID = (SELECT MAX(ID) as ID from tableName where name like '%Jane%')

答案 2 :(得分:1)

尝试以下查询(h / t @lamak)

WITH CTE AS
(
    SELECT *,
           RN = ROW_NUMBER() OVER(PARTITION BY name
                                  ORDER BY [id] DESC)
    FROM poro
)
SELECT *
FROM CTE
WHERE RN = 1