SQL(mysql)排序表并获取其在排序表中的位置的行?
Posted
技术标签:
【中文标题】SQL(mysql)排序表并获取其在排序表中的位置的行?【英文标题】:SQL (mysql) sort table and get row with its position in the sorted table? 【发布时间】:2014-05-04 21:05:35 【问题描述】:基本上我有这张桌子:
表 QID、UID、系统、添加(unix 时间戳)、错误
我试图做的是通过 UID 选择一行,但在此之前按“添加”对表进行排序,使其按时间戳 DESC 顺序排列,然后获取单行及其在排序表中的位置。
我目前有这个可以对行进行排名,但是我如何从中获得单行:
SET @rank=0;
SELECT @rank := @rank +1 AS rank, UID
FROM table
GROUP BY UID
ORDER BY added DESC
【问题讨论】:
您能否提供带有预期结果集的示例数据集? 【参考方案1】:您可以按照以下方式进行操作:
SELECT COUNT(*)+1 AS rank FROM table
WHERE added < (SELECT added FROM table WHERE UID=123)
或者这样:
SELECT * FROM (
SELECT @rank := @rank+1 AS rank, UID
FROM table
GROUP BY UID
ORDER BY added ASC
) tmp WHERE UID=123
【讨论】:
第一个在初始条目检查后工作正常。【参考方案2】:您将使用子查询:
SELECT *
FROM (SELECT @rank := @rank +1 AS rank, UID, added
FROM (SELECT UID, added
FROM t cross join
(SELECT @rank := 0) var
GROUP BY UID
ORDER BY added ASC
) t
) t
WHERE UID = 12346;
一个问题是,当给定的UID
有多行时,added
是不确定的。我怀疑你想要MAX(added)
。
【讨论】:
我得到了这个数据i.imgur.com/xEGS740.png 并尝试使用它,但它总是以排名 1 返回。(使用 ASC 或 DESC) @TristanCunningham 。 . .我的错。在使用带有group by
的变量时,我忘记了 mysql 需要和额外的级别。这是一个小 SQL Fiddle:sqlfiddle.com/#!2/a5a47/10.以上是关于SQL(mysql)排序表并获取其在排序表中的位置的行?的主要内容,如果未能解决你的问题,请参考以下文章