2015-10-19 28 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

它仍然使用嵌套查詢。 –