在使用MySQL查詢時,有時我們需要對數(shù)據(jù)進行分組,并取出每組的第一行。這個需求很常見,通常可以使用子查詢、聯(lián)接等方式實現(xiàn)。下面介紹兩種比較常見的實現(xiàn)方法。
SELECT * FROM table WHERE (field1, field2) IN ( SELECT field1, MIN(field2) FROM table GROUP BY field1 )
這種方法使用子查詢,在子查詢中先按照需要分組的字段進行分組,并取出每組的最小值。然后在主查詢中使用IN語句,根據(jù)該字段和最小值來判斷是否屬于該組的第一行。
SELECT t1.* FROM table t1 LEFT JOIN table t2 ON t1.field1 = t2.field1 AND t1.field2 >t2.field2 WHERE t2.field1 IS NULL
這種方法使用聯(lián)接,在主查詢中將表自聯(lián)一次。然后在ON語句中指定需要分組的字段相等,但是需要取出每組的第一行,所以在ON語句中加入了一個條件,即t1.field2 >t2.field2,這樣能夠保證t2是t1的前一行。然后在WHERE語句中將t2的該字段為NULL的行篩選出來,即可得到每組的第一行。