获取其中列2为X且列1为列1最大值的行

3

我有一个像这样的SQLite表:

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

我想找到包含Col2值为CDE且其Col1值最大的行,也就是在这个例子中是June。或者说,Col2值为CDE的最近添加的行,因为Col1是一个自增列。您能提供一个SQL查询字符串来实现这一点吗?由于这个查询将在循环中运行多次,我需要它非常高效。
谢谢。

迭代?为什么?请解释你如何使用它。也许你不需要迭代和循环,只需要一个查询。 - ypercubeᵀᴹ
因为我正在有条件地添加数据,这取决于查询结果,例如如果DataToBeAdded = LastEntry,则丢弃。 - Guy
4个回答

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 对于第一个查询。我不知道如何评论第二个,似乎有误... - ypercubeᵀᴹ

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演示1


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


0
使用子查询,例如:
SELECT Col1, Col2, Col3
FROM table
WHERE Col1 = (SELECT MAX(Col1) FROM table WHERE Col2='CDE')

根据需要添加索引,例如在Col1上创建聚集索引,在Col2上创建另一个非聚集索引以加速子查询。


-1
在SQLite 3.7.11及更高版本中,最简单的查询语句如下:
SELECT *, max(Col1) FROM MyTable WHERE Col2 = 'CDE'

EXPLAIN QUERY PLAN所示,如果在Col2上建立索引,则此查询和passingby的查询均最有效。


如果你想查看所有Col2的对应值,请使用下面这样的查询:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接