Sql 将具有相同列值的特定数量的记录插入到不同的表中

Sql 将具有相同列值的特定数量的记录插入到不同的表中,sql,sql-server,Sql,Sql Server,假设我有两个表,TBLProProducts和tblPromoItems,它们都包含相同的记录类型。为了简化,假设每个记录只有两个属性,ID和creation\u date。如何从TBLProProducts中获取记录并插入到tblPromoItems中,以便只插入n条记录,并且只有I个具有相同创建日期的记录实例 例如,使用下表,如果最多可以有2条记录具有相同的创建日期,我将如何插入总共3条记录 您可以将row_number与公共表表达式一起使用,以每个日期获取2条记录: with cte as

假设我有两个表,TBLProProducts和tblPromoItems,它们都包含相同的记录类型。为了简化,假设每个记录只有两个属性,ID和creation\u date。如何从TBLProProducts中获取记录并插入到tblPromoItems中,以便只插入n条记录,并且只有I个具有相同创建日期的记录实例

例如,使用下表,如果最多可以有2条记录具有相同的创建日期,我将如何插入总共3条记录

您可以将row_number与公共表表达式一起使用,以每个日期获取2条记录:

with cte as (
  select *, 
    row_number() over (partition by cast(creation_date as date) 
                       order by creation_date desc) rn
  from tblProducts
  )
select * 
from cte
where rn <= 2

我不太清楚你所说的只能插入n条记录的意思。您可能想限制表中插入的数量?一种方法是使用top,选择top 100…

哪些RDBMS以及哪些RDBMS定义了要返回的2条记录?当存在多种可能性时,您必须提出确定赢家的标准。我想我太简化了。这将适用于ms sql server。事实上,creation_date字段是一个datetime,所以我可以知道给定日期的第一个日期是什么,它将被用作平局打破者。我只是想找到一个好的方法,从这个开始。谢谢。我换了别的话题,现在又回到了这个SQL。以前从未使用过ROW_编号,它就像一个符咒。我会投你一票,但我没有这样的名声。
with cte as (
  select *, 
    row_number() over (partition by cast(creation_date as date) 
                       order by creation_date desc) rn
  from tblProducts
  )
select * 
from cte
where rn <= 2