在相同或最接近的日期上进行 SQL 连接

2023-12-10

我有两张桌子

表 a(每个 id 1 行)

id,observation_date
a,2015-03-01
b,2015-03-03
c,2015-03-05

表 b(每个 ID 有多行,但每个 ID/日期组合都是唯一的)

id, insert_date, value
a,2015-02-28,x1
a,2015-03-01,x2
a,2015-03-02,x3
b,2015-02-28,x4
b,2015-03-01,x5
b,2015-03-02,x6
c,2015-02-28,x7
c,2015-03-01,x8
c,2015-03-02,x9
c,2015-03-03,x10
c,2015-03-04,x11

我想在 id 上加入这些表,但也不想加入我想加入表 b 中与表 a 中的观察日期相关的最近插入日期的日期(其中日期是在同一天之前或同一天)作为观察日期)

即输出应该是:

id,observation_date,insert_date,value
a,2015-03-01,2015-03-01,x2
b,2015-03-03,2015-03-02,x6
c,2015-03-05,2015-03-04,x11

执行此操作的一种典型方法是使用相关子查询,每个值对应一个子查询:

select a.*,
       (select b.date
        from b
        where b.id = a.id and b.insert_date <= a.observation_date
        order by b.insert_date desc
        fetch first 1 row only
       ) as insert_date,
       (select b.value
        from b
        where b.id = a.id and b.insert_date <= a.observation_date
        order by b.insert_date desc
        fetch first 1 row only
       ) as value
from a;

也有两种类似的方法可用。使用相关子查询获取日期,然后连接回表以获取其余值。或者,如果您的数据库支持,请使用横向联接(使用apply在 SQL Server 中)。更复杂的方法涉及连接和group by,我不推荐。

注意fetch first 1 row only是 ANSI SQL。您的数据库可能会使用其他东西来达到此目的,例如TOP or LIMIT.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在相同或最接近的日期上进行 SQL 连接 的相关文章

  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • Oracle SQL 函数中可以有 commit 语句吗

    在 SQL 函数中使用 COMMIT 语句是否可能 有意义 从技术上来说 答案是肯定的 你can请执行下列操作 create or replace function committest return number as begin upd
  • SQL查询查找具有特定数量关联的行

    使用 Postgres 我有一个架构conversations and conversationUsers Each conversation有很多conversationUsers 我希望能够找到具有确切指定数量的对话conversati
  • postgresql 不同的不工作

    我使用以下代码从数据库获取值 但是当我编写这段代码时 测试看看问题出在哪里 我注意到查询没有从数据库中获取不同的值 这是查询 select distinct ca id as id acc name as accName pIsu name
  • SQL Server使用in关键字传递字符串数组查询

    我认为 IN 子句不能接受具有多个值的绑定参数 Oracle 不能 需要几分钟 查询是 declare setting varchar max set setting Sales Entry Grid Cursor Customer Man
  • 通过 C# SqlCommand 执行合并语句不起作用

    我正在第一次尝试使用临时表和MERGE语句通过更新 SQL 表SqlCommandC 中的对象 我正在开发的程序旨在首先将大量记录 最多 20k 导出到 Excel 电子表格中 然后 用户可以搜索并替换特定值 并根据需要更新任意多记录中的任
  • 可以有一个带有可变列的表吗?

    这可能是一个愚蠢的问题 但这里是 是否可以创建一个能够包含具有可变列数和自定义列名称的行的动态表 我浏览过 EAV 建模 但看起来很沉重 现实生活中的例子可能是这样的 假设我有一个客户登记册 但每个客户可能需要输入不同的信息 根据您要输入的
  • ALTER TABLE 语句与 FOREIGN KEY 约束冲突

    为什么要添加外键tblDomare表导致此错误 ALTER TABLE 语句与 FOREIGN KEY 约束 FK tblDomare PersN 5F7E2DAC 冲突 冲突发生在数据库 almu0004 表 dbo tblBana 列
  • 向带有检查约束 SQL 的表添加列

    我想向表中添加一列 然后添加一个检查约束以确保其大于 0 我似乎无法让它在 oracle sl Developer 中运行 Alter TABLE store101 add column Base salary Number 7 2 con
  • 是否可以从子查询中获取多个值?

    有没有办法让子查询在oracle db中返回多列 我知道这个特定的sql会导致错误 但它很好地总结了我想要的 select a x select b y b z from b where b v a v from a 我想要这样的结果 a
  • 使用用户定义函数 MySql 时出错

    您好 请帮我解决这个问题 提前致谢 我在数据库中定义了这些函数 CREATE FUNCTION levenshtein s1 VARCHAR 255 s2 VARCHAR 255 RETURNS INT DETERMINISTIC BEGI
  • 在另一种语言中使用 dateFormatter [重复]

    这个问题在这里已经有答案了 我正在运行一段返回的代码nil在具有不同语言设置的 iPhone 上运行时 代码示例如下所示 let dateFormatter DateFormatter dateFormatter dateFormat MM
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • 使用 DISTINCT 进行查询需要很长时间

    我正在使用 Microsoft Access 2003 我的项目中的一个表单需要很长时间才能向用户显示 这是适用的查询 SELECT DISTINCT tb KonzeptDaten DFCC tb KonzeptDaten OBD Cod
  • 如何将所有父母的父母作为循环引用表中子对象的列?

    我有一个表格 其中有类似的列 entityID entityName parentID 我如何编写一个查询来返回实体的所有父级级别 以返回类似的内容 childentityname parentlevel1name parentlevel2
  • PostgreSQL函数中sql语言和plpgsql语言的区别

    我很新数据库开发所以我对下面的例子有一些疑问 函数 f1 语言 SQL create or replace function f1 istr varchar returns text as select hello varchar istr
  • 如何在oracle中将日期转换为时间戳(DD-MON-YYYY HH24:MI:SS.FF格式)?

    我尝试了下面的查询 但它不起作用 select TO TIMESTAMP ColumnName Data type Date DD MON YYYYHH24 MI SS FF from TableName where Changedate
  • 基本的多对多sql选择查询

    我认为这应该很容易 但它却在逃避我 我的帐户和帐户组之间存在多对多关系 一个帐户可以位于零个或多个组中 因此我使用标准连接表 Accounts ID BankName AcctNumber Balance AccountGroups ID
  • CONTAINS 不适用于 Oracle Text

    我在执行此查询时遇到问题 SELECT FROM gob attachment WHERE CONTAINS gob a document java gt 0 它给了我 ORA 29902 error in executing ODCIIn
  • 替换字符串中的多个字符,而不使用任何嵌套替换函数

    我的表中存储了一个方程 我一次获取一个方程 并希望将所有运算符替换为任何其他字符 输入字符串 N 100 6858 6858 N 100 0 2 N 35 运算符或模式 替换字符 输出字符串 N 100 6858 6858 N 100 0

随机推荐

  • VS Code 终端打开,然后崩溃并在按终止按钮后消失

    在 VS Code 中单击 终止终端 后出现此错误 无法解析您的 shell 环境 生成的 shell 出现意外的退出代码 代码为 null 信号 SIGSEGV 现在 当我单击 终端 新终端 时 我的 VSCode 会执行此操作 它打开窗
  • CUDA 流销毁和 CudaDeviceReset

    我已经使用 CUDA 流实现了以下类 class CudaStreams private int nStreams cudaStream t streams cudaStream t active stream public default
  • 获取范围相对于其父容器的开始和结束偏移量

    假设我有这个 HTML 元素 div Hello everyone a This is my home page a p Bye p div 用户用鼠标选择 home 我希望能够确定有多少个字符 parent他的选择开始 以及从末尾开始有多
  • 重命名 JSON 中的属性

    你好 这是我的 json name test options Repartition Active Satellite No 我想用 s 重命名 卫星 中的 卫星 但我没有成功 我试过 UPDATE Liaison set content
  • 如何在将 html 写入 PDF 时应用样式

    我正在将 html 添加到 pdf 文件中 我的 html 是 div 形式 并且包含 style 属性 其样式如下border 2px solid red 但这种风格不适用于我正在写入 pdf 文件的 html 我正在使用以下代码 Doc
  • Cocoa 脚本:从“重复”命令返回克隆对象

    AppleScriptduplicate命令应该返回复制的对象 虽然使用基于 AE 的原始函数的应用程序似乎可以做到这一点 但基于 Cocoa 脚本框架的应用程序似乎永远不会返回任何内容 但缺失值 看来命令处理程序NSCloneComman
  • 是否有规范规定元素的 id 应该设为全局变量?

    如果我有一个 div 在 Chrome 中然后在 javascript 中我可以做a stuff 就好像a是一个全局变量 然而 这不适用于 FireFox 我需要使用document getElementById a 是什么正确的行为这里
  • 使用计时器更新列表 UI

    我正在尝试更新ListView with timer 我已经实现了 android UI 计时器 但我的问题是如何使用它ListView我需要在一定时间间隔后更新列表的每一行 处理程序如何更新列表的每一行 即假设TextView位于我将显示
  • 选择另一个受密码保护的数据库中的表?

    在 Microsoft Access 2003 和 Visual Basic 6 中 我尝试将表复制到另一个受密码保护的访问数据库 如下所示 Select INTO table2 IN database2 mdb Password Test
  • 在SSRS报告中显示条形码

    我正在尝试在 SSRS 报告中显示条形码 我在 Visual Studio 中的条形码报告中创建了一个字段 并将字体类型更改为 BC C39 3 到 1 Wide 格式 我用来显示的相应文本是 hellobarcode 每当我生成报告时 它
  • Clojure - 将字符串转换为整数向量的向量

    我试图解析一个文件并使用每一行来执行任意数量的函数和参数 我想调用的函数接受两个整数向量向量用于矩阵乘法 我能够将参数解析为一个向量 这样我就可以对其和解析的函数符号调用 apply 但我仍然需要将参数从字符串转换为适当的类型 我怎样才能实
  • “-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data”未调用

    看看这个代码片段 void connection NSURLConnection connection didReceiveResponse NSURLResponse response webData setLength 0 void c
  • 删除 websphere 中的 cookie - 如何注销

    我正在使用另一个网页 该网页通过 URL 将用户身份验证 AD 登录 传递到 WebSphere 当我注销时 我将重定向到登录页面 并且已经登录 因为我的会话从未关闭 我尝试了一些方法来禁用 WebSphere 的 cookie 但没有任何
  • IE中的rowspan和colspan问题

    因此 我需要创建具有复杂的 colspan 和 rowspan 系统的表 你可以看一下here 这是HTML table cellspacing 0 cellpadding 0 style width 100 tr td img src h
  • 如何在 MATLAB 中为该向量生成映射键?

    我有一个正在查看多个元素的函数 每个元素都是 8x1 列向量的形式 向量中的每个条目都是小于 1000 的整数 每次看到这样的向量时 我都会在检查该向量是否已在此列表中后将其添加到 已见过 向量列表中 该函数将检查约 100 000 个此类
  • 如何使用 Perl 找到目录及其所有子目录中最新的 .pl 文件?

    如何扫描整个目录的内容 包括其子目录的内容 并找到最新的 pl使用 Perl 在其中创建文件 我想构建所有完整文件路径的排序数组 列表 pl目录树中的文件 因此 例如 如果我的基本目录是 home users cheeseconqueso
  • C#同时执行2个线程

    我正在尝试在 HTTP 处理程序中重现线程错误条件 基本上 ASP net 工作进程正在创建 2 个线程 它们在加载某个页面时同时调用我的应用程序中的 HTTP 处理程序 http 处理程序内部是一个非线程安全的资源 因此 当两个线程尝试同
  • Visual Studio 不在我的 Asp.net MVC 视图中显示 Linq 扩展

    这让我感到困惑 我似乎无法使 Visual Studio 2010 识别视图代码中的 System Linq 扩展方法 Intellisense 不起作用 并且 Visual Studio 红色下划线无法识别的扩展方法 这些是 web co
  • 在闪亮页面中使用可变数量的输入字段

    我的问题如下 我有一个闪亮的应用程序 它根据用户输入显示可变数量的输出元素 例如 详细信息如下 使用闪亮动态添加绘图到网页 但是 我还想向每个输出元素添加一个输入元素 允许用户为输出指定一些修饰符 例如 让用户选择将每个元素视为绘图还是表格
  • 在相同或最接近的日期上进行 SQL 连接

    我有两张桌子 表 a 每个 id 1 行 id observation date a 2015 03 01 b 2015 03 03 c 2015 03 05 表 b 每个 ID 有多行 但每个 ID 日期组合都是唯一的 id insert