3

我有一个这样的 SQLite 表:

Col1  Col2  Col3
1     ABC   Bill
2     CDE   Fred
3     FGH   Jack
4     CDE   June

我想找到包含 CDE 的 Col2 值的行,该值具有最大的 Col1 值,即在本例中为 6 月。或者,换一种说法,最近添加的行的 col2 值为 CDE,因为 Col1 是一个自动递增列。实现此目的的 SQL 查询字符串是什么?我需要这样做是有效的,因为查询将在一个循环中运行许多迭代。

谢谢。

4

4 回答 4

1

尝试这个:

SELECT t1.*
FROM table1 t1
INNER JOIN
(
   SELECT MAX(col1) MAXID, col2
   FROM table1
   GROUP BY col2
) t2 ON t1.col1 = t2.maxID AND t1.col2 = t2.col2
WHERE t1.col2 = 'CDE';

SQL 小提琴演示1


1:这个demo是mysql,但在sqlite中使用相同的语法应该可以正常工作。

于 2012-11-24T01:48:04.910 回答
1
SELECT * FROM table WHERE col2='CDE' ORDER BY col1 DESC LIMIT 1

如果 col1 不是增量,它会有点像

SELECT *,MAX(col1) AS max_col1 FROM table WHERE col2='CDE' GROUP BY col2 LIMIT 1
于 2012-11-24T01:01:58.847 回答
0

使用子查询,例如:

SELECT Col1, Col2, Col3
FROM table
WHERE Col1 = (SELECT MAX(Col1) FROM table WHERE Col2='CDE')

根据需要添加索引,例如 Col1 上的聚集索引和 Col2 上的另一个非聚集索引以加快子查询。

于 2012-11-24T01:03:06.487 回答
-1

在 SQLite 3.7.11 及更高版本中,最简单的查询是:

SELECT *, max(Col1) FROM MyTable WHERE Col2 = 'CDE'

EXPLAIN QUERY PLAN所示,如果 上有索引,则 this 和 passby 的查询都是最有效的Col2


如果您想查看所有 Col2值的对应值,请改用如下查询:

SELECT *, max(Col1) FROM MyTable GROUP BY Col2
于 2012-11-24T10:03:08.423 回答