Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL заявка за връщане само на 1 запис на ИД на група

SELECT  t.*
FROM    (
        SELECT  DISTINCT groupid
        FROM    mytable
        ) mo
CROSS APPLY
        (
        SELECT  TOP 1 *
        FROM    mytable mi
        WHERE   mi.groupid = mo.groupid
        ORDER BY
                age DESC
        ) t

или това:

SELECT  *
FROM    (
        SELECT  *, ROW_NUMBER() OVER (PARTITION BY groupid ORDER BY age DESC) rn
        FROM    mytable
        ) x
WHERE   x.rn = 1

Това ще върне най-много един запис на група дори в случай на равенство.

Вижте тази статия в моя блог за сравнения на ефективността на двата метода:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Стойността на колоната за идентичност изведнъж скача до 1001 в sql сървъра

  2. Проблеми с производителността на SQL Server 2012 Enterprise Edition при лицензиране на CAL

  3. 5 предимства за сигурността на решенията за наблюдение на базирани в облак бази данни

  4. SQL Server ЗА ВСЕКИ цикъл

  5. Как да използвате Try Catch за показване на грешка при влизане за (App.Config) низ за връзка