我有一张这样的表:
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
答案 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