2015-10-19 64 views
2

我练上HackerRank我的SQL知识,我写了一个查询,我觉得它should't被嵌套,但我不知道如何去优化它:如何在SQL Server中取消嵌套此查询?

SELECT 
    CAST(LONG_W as numeric(16, 4)) 
FROM 
    STATION 
WHERE 
    LAT_N = (SELECT MIN(LAT_N) 
      FROM STATION 
      WHERE LAT_N > 38.7780) 

它的天气观测-站 - 17在hackerrank。任何人都可以帮助这个吗?

编辑:这是从HackerRank:

鉴于保持用于五列ID,城市,州,北纬和西经数据的表STATION。

+-------------+------------+ 
| Field  | Type  | 
+-------------+------------+ 
| ID   | INTEGER | 
| CITY  | VARCHAR(21)| 
| STATE  | VARCHAR(2) | 
| LAT_N  | NUMERIC | 
| LONG_W  | NUMERIC | 
+-------------+------------+ 

编写一个查询,找到相应的西经于北半球大于38.7780高达4位小数的最小值。

回答

1

试试这个,如果你期待只有一个最小记录

SELECT top 1 cast(LONG_W as numeric(16, 4)) FROM STATION 
WHERE LAT_N > 38.7780 order by LAT_N asc 
+0

这看起来不错,谢谢! – Zoneh

+0

不适用此解决方案!因为原始查询可以有更多1个结果! –

+1

@Zoneh但是如果你有多个具有相同'LAT_N'的记录呢?这个查询不会返回所有这些,它只会返回第一个(实际上只有一行)。 –

0

也许这样?

DECLARE @lat INT; 
SELECT @lat=MIN(LAT_N) FROM STATION WHERE LAT_N > 38.7780 

SELECT cast(LONG_W as numeric(16, 4)) FROM STATION 
WHERE LAT_N = @lat 

或本

SELECT cast(a.LONG_W as numeric(16, 4)) 
FROM STATION a 
INNER JOIN (SELECT MIN(LAT_N) LAT_N FROM STATION WHERE LAT_N > 38.7780) b 
ON a.LAT_N = b.LAT_N 
+3

它仍然使用嵌套查询。 –