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

Как да получа ID на записа с минималната дата за всеки външен ключ?

Един от начините да го направите е

select A.ForeignKeyID, R.recordID
from (select distinct t.ForeignKeyID from table as t) as A
    outer apply
    (
        select top 1 t.recordID
        from table as t where t.ForeignKeyID = A.ForeignKeyID
        order by t.createdDate asc
    ) as R

ПРИМЕР НА SQL FIDDLE

Друг начин да го направите е

select top 1 with ties
    t.recordID, t.ForeignKeyID
from table as t
order by row_number() over (partition by t.ForeignKeyID order by t.createdDate)

ПРИМЕР ЗА SQL FIDDLE

И друг начин

select A.recordID, A.ForeignKeyID
from
(
    select
        t.recordID, t.ForeignKeyID,
        row_number() over (partition by t.ForeignKeyID order by t.createdDate) as RowNum
    from table1 as t
) as A
where A.RowNum = 1

ПРИМЕР ЗА SQL FIDDLE

Харесвам втория повече от другите поради краткия код



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на CASE в оператора WHERE, когато параметърът има множество стойности

  2. Не може да се използва псевдоним в клаузата WHERE, но може в ORDER BY

  3. В SSIS как да получа броя на редовете, върнати от източника, които ТРЯБВА да бъдат обработени

  4. Тригери на SQL Server – Част 2 DDL &LOGON тригери

  5. Как да копирате запис в SQL таблица, но да замените уникалния идентификатор на новия ред?