Sql server 根据日期顺序连接两个表

Sql server 根据日期顺序连接两个表,sql-server,Sql Server,在SQLServer2008中,我想根据日期顺序联接两个表。更具体地说,我需要按照以下规则将付款表左键连接到配置文件表: UserId必须匹配 付款中的每个记录都与配置文件中的记录与付款前最接近的配置文件.CreationDate匹配。付款日期 举个简单的例子 Table Payments: UserId PayDate Amount 1 2012 400 1 2010 500 2 2014 600 Table Profiles: Use

在SQLServer2008中,我想根据日期顺序联接两个表。更具体地说,我需要按照以下规则将
付款
表左键连接到
配置文件
表:

  • UserId
    必须匹配

  • 付款
    中的每个记录都与
    配置文件
    中的记录与
    付款前最接近的
    配置文件.CreationDate
    匹配。付款日期

  • 举个简单的例子

    Table Payments:
    UserId  PayDate Amount
    1       2012    400
    1       2010    500
    2       2014    600
    
    Table Profiles:
    UserId  CreationDate Address
    1       2009         NY
    1       2015         MD
    2       2007         NJ
    2       2013         MA
    3       2008         TX
    
    Desired Result:
    UserId  CreationDate PayDate Amount Address
    1       2009         2010    500    NY
    1       2009         2012    400    NY
    2       2013         2014    600    MA
    
    保证用户在付款前至少有1个
    档案
    记录。另一个限制是我没有权限将任何内容写入数据库


    我的想法是首先将
    付款
    配置文件
    ,然后在与每个
    (UserId,PayDate)
    元组匹配的记录组中,按
    CreationDate对其排序,然后选择最后一条记录。但是我不知道如何用SQL语言实现它,或者有没有更好的方法来实现这个合并?

    使用
    outerapply

    SELECT py.UserId,
           CreationDate,
           PayDate,
           Amount,
           Address
    FROM   Payments py
           OUTER APPLY (SELECT TOP 1 *
                        FROM   Profiles pr
                        WHERE  py.UserId = pr.UserId
                        and    PayDate> CreationDate
                        ORDER  BY CreationDate desc) cs 
    

    这是一个非常糟糕的数据库设计。。。外部应用与按日期区分订单的前1条记录