我有一个像这样的SQLite表:
Col1 Col2 Col3
1 ABC Bill
2 CDE Fred
3 FGH Jack
4 CDE June
我想找到包含CD2的Col2值的行,其具有最大Col1值,即在这种情况下为6月。或者换句话说,最近添加的行的col2值为CDE,因为Col1是一个自动增量列。什么是SQL查询字符串来实现这一目标?我需要这个有效,因为查询将在循环中运行多次迭代。
感谢。
答案 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';
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