2010-02-13 17 views
3

例如:获取值给出此表稀疏的ID前面的最大值

SELECT max(id) FROM Comics 

我得到:

 
|id| 
| 1| 
| 2| 
| 3| 
| 6| 
| 7| 

我可以用这个查询获得我的表中的最高“ID”:

 
|id| 
| 7| 

如何才能得到最高“ID”(即使值不连续)之前的“ID”?

+1

ORDER BY ID DESC并拿起你的程序中的第二个。顺便说一句,你的数据库是什么? – ziya 2010-02-13 00:27:22

回答

1
SELECT max(id) FROM Comics 

相同

SELECT TOP 1 id FROM Comics ORDER BY ID DESC 

注:这是事务SQL语法,使用ROWNUM或限制取决于您的供应商

得到第2行,你可以做

SELECT TOP 1 ID 
FROM 
    (SELECT TOP 2 id 
    FROM Comics 
    ORDER BY ID DESC) 
ORDER BY ID ASC 
+0

我不知道你可以在SQL里面有这样的SQL,谢谢。 – 2010-02-13 00:34:47

+0

@Joseph这种技术被称为派生表或内联视图。 – 2010-02-13 00:35:49

+0

如果您使用mysql或postgre查询更简单,只需使用最新功能 – 2010-02-13 00:38:34

2

一般而言,您可以先找到最大的id(您已经完成),然后找到最大编号为的小于<)的最大编号。

具体来说,

select max(id) from Comics where id < 7 

或者,你可以命令按降序排列结果:

select id from Comics order by id desc 

,然后看看返回行。

+0

或按降序排序,使用'OFFSET'跳到第二行,'LIMIT'返回1. – 2010-02-13 00:32:35

0

这样做也可以。

SELECT 
    max(id) 
FROM 
    Comics 
WHERE id < (SELECT max(id) FROM Comics)