How do I select the first row per group in an SQL Query?

后端 未结 9 972
别跟我提以往
别跟我提以往 2020-12-29 09:26

I\'ve got this SQL query:

SELECT   Foo, Bar, SUM(Values) AS Sum
FROM     SomeTable
GROUP BY Foo, Bar
ORDER BY Foo DESC, Sum DESC

This resul

9条回答
  •  一向
    一向 (楼主)
    2020-12-29 09:55

    It's an old post but I had the same problem today. I've solved it by trying many queries until it works. I'm using SQL Compact 3.5 with visual basic 2010.

    This example is for a table named "TESTMAX" with columns "Id" (primary key), "nom" (name) and "value", you can use this to obtain rows with max "value" for each "nom" :

    SELECT TESTMAX.Id, TESTMAX.NOM, TESTMAX.Value
    FROM     TESTMAX INNER JOIN
                      TESTMAX AS TESTMAX_1 ON TESTMAX.NOM = TESTMAX_1.NOM
    WHERE  (TESTMAX.Value IN
                          (SELECT MAX(Value) AS Expr1
                           FROM      TESTMAX AS TESTMAX_2
                           WHERE   (NOM = TESTMAX_1.NOM)))
    GROUP BY TESTMAX.Id, TESTMAX.NOM, TESTMAX.Value
    

    If you want to delete the other rows, you can also use :

    DELETE FROM TESTMAX
    WHERE  (Id NOT IN
                          (SELECT TESTMAX_3.Id
                           FROM      TESTMAX AS TESTMAX_3 INNER JOIN
                                             TESTMAX AS TESTMAX_1 ON TESTMAX_3.NOM = TESTMAX_1.NOM
                           WHERE   (TESTMAX_3.Value IN
                                                 (SELECT MAX(Value) AS Expr1
                                                  FROM      TESTMAX AS TESTMAX_2
                                                  WHERE   (NOM = TESTMAX_1.NOM)))
                           GROUP BY TESTMAX_3.Id, TESTMAX_3.NOM, TESTMAX_3.Value))
    

提交回复
热议问题