2017-09-27 132 views
-2

我有下表,我执行此查询期望得到201705结果未从子查询中选择

SELECT top 1 TIME FROM 
(
    SELECT TOP 3 TIME 
    FROM TABLE 
    WHERE TIME >= 201703 
) t 
Order by TIME desc 

不过,我得到201712 ..

TIME 
201605 
201606 
201607 
201608 
201609 
201610 
201611 
201612 
201701 
201702 
201703 
201704 
201705 
201706 
201707 
201708 
201709 
201710 
201711 
201712 
+2

标签你使用的DBMS,查询是特定产品。 – jarlh

+4

将订单放入子查询中。 – Sankar

+0

添加一些示例表格数据和预期结果 - 作为格式化文本(不是图片)。 – jarlh

回答

0

你并不需要一个子查询,但每当你使用TOP(n)的,你还需要使用ORDER BY

SELECT TOP(1) [TIME] 
FROM TABLE 
WHERE [TIME] >= 201703 
ORDER BY [TIME] DESC 

“时间”是T-SQL中使用的一个词(作为数据类型),所以使用[]或“”来确保它不被误解。我不推荐“日期”或“时间”作为列名。

如果是想第三最新的条目,试试这个

SELECT TOP (1) [TIME] 
FROM (
    SELECT TOP (3) [TIME] 
    FROM TABLE 
    WHERE TIME >= 201703 
    ORDER BY [TIME] DESC 
) t 
ORDER BY [TIME] ASC 
+1

我认为OP想要第三排,而不是TOP(1).... – TriV

+0

@TriV好了,没有明确的通知我们这是猜测。也许你是对的。 –

+0

是的,我想得到第三个201705。 – Nicklooo