我想执行2个单独的命令,从我的表中返回一个值。
第一个可能是前1,因为是第一行,没问题......
但我怎么能做出像前2名那样的东西,但只显示第二行呢?
有一种简单的方法吗?就像一个简单的选择?
1行:
从LastUpdate desc <产品订单中选择前1个代码
答案 0 :(得分:10)
据我所知,这个问题没有通用的解决方案 - 不同的DBMS有不同的实现方法。
在Microsoft SQL Server中,您可以使用ROW_NUMBER子句:
SELECT code FROM
(SELECT TOP 2 code, Row_Number() OVER (ORDER BY lastupdate) AS rownum
FROM Products) AS tbl
WHERE rownum = 2;
Oracle有一个类似的伪列,名为ROWNUM。但是,这里需要注意的是,在排序发挥作用之前,计算此值。因此,您必须再次使用子查询:
SELECT code FROM
(SELECT code, ROWNUM rnum FROM
(SELECT code FROM Products ORDER BY lastupdate)
WHERE ROWNUM <= 2)
WHERE rnum = 2
请注意,您无法在此处执行简单的ROWNUM = 2
条件,因为它永远不会满足 - ROWNUM会考虑实际返回的行的数量,因此如果没有第一行返回行,ROWNUM永远不会达到值'2',因此永远不会满足条件。
在MySQL中,这更简单:
SELECT code FROM Products ORDER BY lastupdate LIMIT 2, 1
(我不熟悉MySQL,所以我不确定LIMIT是否会在ORDER BY子句之前或之后计算 - 如果其他人可以证实这一点会很好。)
其他DBMS以不同的方式进行。
答案 1 :(得分:3)
选择第一行:
select ... order by some_rule limit 1;
选择第二行:
select ... order by some_rule limit 1 offset 1;
答案 2 :(得分:1)
在MS-SQL中,我更容易记住:
选择top N
行命令desc作为“表”,然后选择前1个订单asc
SELECT TOP 1 code FROM
(SELECT TOP 2 code, lastupdate FROM Products ORDER BY lastupdate DESC) AS tblTempQuery
ORDER BY lastupdate ASC
答案 3 :(得分:-2)
SELECT A.CName FROM(来自Tname的SELECT cname ORDER BY cname desc FETCH FIRST 2 ROWS ON)作为A.cname的命令仅获取前1行;
其中CNAME =要引用的列, Tname =你要拉的表名。 在这里你可以用你想要获取的行替换2的值..