sql - 如何对最新记录进行联接? SQL

标签 sql

我正在查询以获取 A 记录日期之前的每个 A 记录的最新 B 记录。 (我希望这是有道理的)

我不知道该怎么做!请帮忙!

我的最终观点将是

AID, AData, ADate, BData

粗表模式
table A
(
AID,
ADate,
AData
)

table B
(
BID,
AID,
BDate,
BData
)

需要注意的有:
  • 表 A 在 SQL DB 中
  • 表 B 来自
    链接服务器到 Oracle
  • B表 super 棒
    巨大的

  • 谢谢!

    最佳答案

    这个查询可以解决问题:

    select     a.*, curr.*
    from       a
    inner join b         curr
    on         a.aid   = curr.aid
    and        a.adate > curr.bdate
    where      curr.bdate = (
                   select max(b.bdate)
                   from   b
                   where  b.aid   =  curr.aid
                   and    b.bdate <= curr.bdate 
               )
    

    有几个但是。我对这些“链接表”没有太多经验,但我可以想象它会出错。您应该尝试弄清楚 MS SQL 如何解决此类查询。您要确定的是,它可以将子查询下推到 oracle 端——您绝对不希望 MS SQL 通过网络获取所有数据并在 MS SQL 端执行它。

    如果性能是一个问题,您可能应该尝试相反的方法 - 在 oracle 端获取 A 表的副本,在那里解决查询完全是 View 中的内容,然后如果您需要在MSSQL 端,链接到该 View 。

    关于sql - 如何对最新记录进行联接? SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2330702/

    相关文章:

    sql - 如何在不替换 SQL Server 中的子字符串的情况下替换句子中的特定单词

    sql - 将字符串匹配到 Postgres 数据库列中的字符串数组

    sql - 创建一个新的多对多表

    mysql - 限制数据库级别的关联记录数

    sql - 连接两个表,只使用右表的最新值

    mysql - 基于主键的 SQL 列名称

    sql - 如何使用 SQL Server 2008 执行多个 CASE WHEN 条件?

    MySQL 跟随列的变化

    sql - 如何同步在线和离线数据库

    sql - 将逗号分隔值动态拆分为列