2014-01-30 237 views
0

我在我的sql查詢中遇到了一些問題。SQL查詢最大值和最小值

我有一個表table_name與以下字段:id,zip,大小。此表中有3個條目,「zip」字段的條目是2001,2005,2009,所有三個條目的「大小」值都是5。我想要根據我的搜索字段的最大值和最小值。

當我搜索2001年和2009年之間的任何值,然後查詢得到完美的結果,每查詢。

例子:如果我搜索字段值2003則給出了兩個最小值2001最大值2005

但是,當我搜索不到2001年或2009年比任何較大值,那麼它給空的結果。

任何人都可以告訴我在我的查詢中我做了什麼錯誤。

SELECT * FROM `table_name` 
WHERE `size` LIKE ('%5%') 
    AND (`zip` in (SELECT max(`zip`) 
       FROM `table_name` 
       WHERE `zip` < '2010' 
       order by `zip` desc) 
    OR `zip` in (SELECT min(`zip`) 
       FROM `table_name` 
       WHERE `zip` > '2010' 
       order by `zip` asc) 
    ) 
+1

'zip'字段是數字還是char字段?此外,什麼數據類型是'大小'字段? – krowe

+0

您已使用'MySQL','SQL-Server'和'SQL-Server-2008'標記,但這看起來像'MySQL'語法。你實際使用哪個DBMS? – GarethD

+1

搜索2010年時應該返回2009年。如果不是這可能是由於錯誤的數據類型。順便說一句,你不需要在標量子查詢中使用ORDER BY。 – dnoeth

回答

0

感謝大家分享你的想法。

最後我發現我的查詢錯誤。我在查詢中使用了LIKE ('%5%'),對於這個支架()它創建了一個問題。所以我只是刪除括號形式LIKE並且還將LIKE '%5%'條件添加到內部查詢中。

SELECT * FROM `table_name` WHERE `size` LIKE '%5%' AND (`zip` in (SELECT max(`zip`) FROM `table_name` WHERE `zip` < '2010' AND `size` LIKE '%5%' order by `zip` desc) OR `zip` in (SELECT min(`zip`) FROM `table_name` WHERE `zip` > '2010' AND `size` LIKE '%5%' order by `zip` asc)) 
1

它可能與數據類型有關。您對字符串值>和<條件。我建議先將它們轉換爲整數值