2017-02-20 32 views
1

只選擇行我有一個MySQL表如下匹配對

ID SHEET_NUMBER DAYS RESULT 
1 55201   9 10 
2 55209   28 25.5 
3 55209   28 27.9 
4 38558   7 12 
5 38552   5 19 
6 38559   5 5 

我想只選擇首先匹配張數&行只有當如果有匹配對28天標本

所以如果只有一個28天,它將不會選擇,但如果有至少2x的28天,它會得到兩個行

我完全失去了,我知道我應該使用羣..但我我不確定它的用途。

三江源

+2

那麼你的例子中究竟需要的結果集是什麼? –

回答

3

你可以試試下面的查詢:

SELECT * 
FROM test 
WHERE sheet_number IN (
    SELECT sheet_number 
    FROM test 
    WHERE days = 28 
    GROUP BY sheet_number 
    HAVING COUNT(*) >= 2 
); 

這裏的SQL Fiddle

+0

像夢一樣工作,謝謝! –

1

首先,寫有兩行或多行與28

SELECT d.sheet_number 
    FROM my_table_below d 
    WHERE d.days = 28 
    GROUP BY d.sheet_number 
    HAVING COUNT(1) > 1 

days價值發現sheet_number隨着該查詢的查詢,我們可以把這個作爲內嵌視圖,並加入回原來的表找到匹配的行:

SELECT t.* 
    FROM (SELECT d.sheet_number 
      FROM my_table_below d 
      WHERE d.days = 28 
      GROUP BY d.sheet_number 
     HAVING COUNT(1) > 1 
     ) m 
    JOIN my_table_below t 
    ON t.sheet_number = m.sheet_number 
    AND t.days = 28 
ORDER BY t.sheet_number, t.id 

忽略的條件t.days = 28在外查詢,如果規範是返回所有行的sheet_number,不僅僅是行210。 (該規範有點不清楚。)