2016-09-16 60 views
0

嗨(即時通訊對於SQl來說很新穎),我想查找與該ID相關的最小和最大caseno,並且能夠獲得價格與那些caseno相關聯。從兩個表我的數據是這樣的:從另一列中查找與某個特定ID相關聯的一列中的最小值和最大值

表1

Id |Caseno |Price 
----------------- 
10 |101 |5 
10 |102 |6 
10 |103 |7 
11 |201 |5 
11 |202 |6 
12 |203 |5 
12 |204 |6 
12 |205 |7 

表2

Caseno |Price 
---------------- 
101  |5 
102  |6 
103  |7 
201  |5 
202  |6 
203  |5 
204  |6 
205  |7 

我希望我的輸出爲以下幾點:

Id |Caseno|Price 
----------------- 
10 |101 | 5 
10 |103 | 7 
11 |201 | 5 
12 |203 | 5 
12 |205 | 7 

查詢我使用在下面,但它沒有給我正確的輸出:

select id, price, max(caseno) lowestcaseno ,min(caseno) highestcaseno 
from table1 t join table2 a on (t.caseno=a.caseno) 
group by id,price 

我是否需要創建子查詢?如果是的話,我應該把它們放在哪裏或哪裏?謝謝你,任何幫助,非常感謝!

+1

你使用的是什麼數據庫引擎和版本? – Lamak

+1

爲什麼你有兩個如此相似的桌子? (這是主要問題。) – jarlh

+1

爲什麼id'11'只在結果集中出現一次? –

回答

0

您的示例數據有一些問題,但其中大部分似乎暗示您希望保留每個Id組具有最高和最低價格的賭場。如果是這樣,那麼一種方法是創建一個子查詢來識別這些賭場,然後使用此子查詢在原始表中選擇正確的完整記錄。

SELECT c1.Id, 
     c1.Caseno, 
     c1.Price 
FROM caseno c1 
INNER JOIN 
(
    SELECT Id, 
      MIN(Price) AS minPrice, 
      MAX(Price) AS maxPrice 
    FROM caseno 
    GROUP BY Id 
) c2 
    ON c1.Id = c2.Id AND 
     (c1.Price = c2.minPrice OR 
     c1.Price = c2.maxPrice) 
+0

謝謝你,給了我我正在尋找的輸出! – Sessions

0


你可以有一個查詢作爲,

select t1.ID, t1.Caseno, t1.Price from table1 t1 
where price = (select min(price) from table1 t2 where t1.Caseno =t2.Caseno) 
or price = (select min(price) from table1 t2 where t1.Caseno =t2.Caseno) 
order by price 

希望你得到它。

+0

查詢是否有效? –

0
SELECT Id, Caseno, Price, 
     CASE WHEN rn_minPrice = rn_maxPrice THEN 'MIN/MAX' 
      WHEN rn_minPrice = 1   THEN 'MIN' 
      ELSE 'MAX' 
     END result 
FROM (
     SELECT Id, 
       Caseno, 
       Price 
       ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Price)  AS rn_minPrice, 
       ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Price DESC) AS rn_maxPrice, 
     FROM table1 
    ) as T 
WHERE rn_minPrice = 1 or rn_maxPrice = 1 
0

假設表1爲t1。我認爲沒有任何使用表2作爲Caseno,Price列也存在於table1中。

;WITH CTE AS 
(
    SELECT ID,MIN(PRICE) PRICE FROM T1 GROUP BY ID 
    UNION 
    SELECT ID,MAX(PRICE) FROM T1 GROUP BY ID 
) 
SELECT C.ID,T1.CASENO,C.PRICE FROM CTE C 
INNER JOIN T1 ON C.ID=T1.ID AND C.PRICE=T1.PRICE ORDER BY C.ID