2

私は次の表を持っています

recordID               createdDate                         ForeignKeyID
00QA000000PtFXaMAN     2012-01-03 13:23:36.000             001A000000ngM21IAE
00QA000000OS2QiMAL     2011-12-15 12:03:02.000             001A000000ngM21IAE
.
.
.
.

私は、createdDAteがforeignKeyIDのmin(createdDate)であるforeignKeyIDのrecordIDを取得しようとしています

recordID が ID int の場合、次のクエリを実行することで取得できます

Select min(recordId),ForeignkeyID
from table 
group by ForeignKeyId

私は当初、次のクエリで一時テーブルを作成し、それをminDateとforeignKeyIDのテーブルに結合できると考えていましたが、同じ正確なcreatedDateを持つforeignKeyIdのレコードが複数あることがわかりました。

Select min(createdDate) as minDate,ForeignKeyID
from table
group by ForeignKeyId

私は、一時テーブルやサブクエリなどを実際に使用することにオープンです。ありがとう。

4

2 に答える 2

3

それを行う方法の1つは、

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 フィドルの例

それを行う別の方法は

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 フィドルの例

そして別の方法

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 フィドルの例

コードの短さのため、私は他のものよりも2番目が好きです

于 2012-11-30T20:42:41.083 に答える
2
SELECT 
    recordID, createdDate, ForeignKeyID
FROM
  ( SELECT 
        recordID, createdDate, ForeignKeyID,
        ROW_NUMBER() OVER ( PARTITION BY ForeignKeyID 
                            ORDER BY createdDate, recordID
                          ) AS rn
    FROM 
        tableX
  ) AS t
WHERE 
    rn = 1 ;
于 2012-11-30T20:49:47.417 に答える