获取column2为X的行,column1为column1的max

时间:2012-11-24 00:55:46

标签: sql sqlite

我有一个像这样的SQLite表:

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

我想找到包含CD2的Col2值的行,其具有最大Col1值,即在这种情况下为6月。或者换句话说,最近添加的行的col2值为CDE,因为Col1是一个自动增量列。什么是SQL查询字符串来实现这一目标?我需要这个有效,因为查询将在循环中运行多次迭代。

感谢。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 Fiddle Demo 1


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

答案 2 :(得分:0)

使用子查询,例如:

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

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

答案 3 :(得分:-1)

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

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

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


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

SELECT *, max(Col1) FROM MyTable GROUP BY Col2