如何获取每个外键的最短日期记录的记录 ID?
Posted
技术标签:
【中文标题】如何获取每个外键的最短日期记录的记录 ID?【英文标题】:How do I get the record ID of the record with the min date for each foreign key? 【发布时间】:2012-11-19 02:57:11 【问题描述】:我有下表
recordID createdDate ForeignKeyID
00QA000000PtFXaMAN 2012-01-03 13:23:36.000 001A000000ngM21IAE
00QA000000OS2QiMAL 2011-12-15 12:03:02.000 001A000000ngM21IAE
.
.
.
.
我正在尝试获取 foreignKeyID 的 recordID,其中 createdDAte 是 foreignKeyID 的 min(createdDate)
如果 recordID 是 identity int 我可以通过以下查询得到它
Select min(recordId),ForeignkeyID
from table
group by ForeignKeyId
我原本以为我可以使用以下查询创建临时表,然后将其加入到 minDate 和 foreignKeyID 上的表中,但后来我发现 foreignKeyId 的多条记录具有完全相同的 createdDate。
Select min(createdDate) as minDate,ForeignKeyID
from table
group by ForeignKeyId
我愿意使用临时表或子查询或其他任何东西。谢谢。
【问题讨论】:
这个问题过去已经回答过很多次了:***.com/questions/tagged/… @BillKarwin 感谢您指出这一点,我很难弄清楚如何搜索问题。我尝试了一些,但没有找到我需要的东西。 【参考方案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 FIDDLE EXAMPLE
另一种方法是
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 EXAMPLE
另一种方式
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 EXAMPLE
由于代码短,我比其他人更喜欢第二个
【讨论】:
哇@roman 非常感谢你。第一个效果很好,我会检查其他 2 个。【参考方案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 ;
【讨论】:
这对我很有帮助。谢谢以上是关于如何获取每个外键的最短日期记录的记录 ID?的主要内容,如果未能解决你的问题,请参考以下文章