我有一个像这样的SQLite表:
Col1 Col2 Col3
1 ABC Bill
2 CDE Fred
3 FGH Jack
4 CDE June
我想找到包含Col2值为CDE且其Col1值最大的行,也就是在这个例子中是June。或者说,Col2值为CDE的最近添加的行,因为Col1是一个自增列。您能提供一个SQL查询字符串来实现这一点吗?由于这个查询将在循环中运行多次,我需要它非常高效。
谢谢。
我有一个像这样的SQLite表:
Col1 Col2 Col3
1 ABC Bill
2 CDE Fred
3 FGH Jack
4 CDE June
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
试试这个:
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中使用相同的语法应该也可以正常工作。
SELECT Col1, Col2, Col3
FROM table
WHERE Col1 = (SELECT MAX(Col1) FROM table WHERE Col2='CDE')
根据需要添加索引,例如在Col1上创建聚集索引,在Col2上创建另一个非聚集索引以加速子查询。
SELECT *, max(Col1) FROM MyTable WHERE Col2 = 'CDE'
如EXPLAIN QUERY PLAN所示,如果在Col2
上建立索引,则此查询和passingby的查询均最有效。
如果你想查看所有Col2
的对应值,请使用下面这样的查询:
SELECT *, max(Col1) FROM MyTable GROUP BY Col2