您需要查询两个表 A 和 B,其中包含时间字段 timeA 和 timeB。如果表 A 有符合条件的数据,则优先取最近一次时间 timeA,否则取表 B 中符合条件的 timeB。此外,还需要计算当前时间与取得的时间差值是否小于指定的筛选参数 time。

可以使用以下 SQL 查询语句实现您的需求:

SELECT
    CASE
        WHEN A.timeA IS NOT NULL THEN A.timeA
        ELSE B.timeB
    END AS selected_time,
    CASE
        WHEN A.timeA IS NOT NULL THEN TIMESTAMPDIFF(SECOND, A.timeA, CURRENT_TIMESTAMP)
        ELSE TIMESTAMPDIFF(SECOND, B.timeB, CURRENT_TIMESTAMP)
    END AS time_diff,
    ...
FROM
    A
    LEFT JOIN B ON ...
WHERE
    ...
HAVING
    time_diff < time

解释:

  1. LEFT JOIN 连接操作符: 用于连接两个表,保证即使表 A 中没有匹配数据,也能从表 B 中获取数据。
  2. CASE 语句: 判断 A 表中是否有符合条件的数据。如果有,则选择 A 表的 timeA 字段,否则选择 B 表的 timeB 字段作为 selected_time。
  3. TIMESTAMPDIFF 函数: 计算当前时间与选取的时间的差值,单位为秒。
  4. HAVING 子句: 对查询结果进行筛选,只保留时间差值小于筛选参数 time 的数据。

注意:

  • ... 部分需要根据具体需求进行补充和修改,包括关联条件、筛选条件以及其他需要查询的字段等。
  • 可以根据需要调整 TIMESTAMPDIFF 函数的第二个参数,例如使用 MINUTE 来计算时间差值以分钟为单位。

希望以上内容能够帮助您解决问题,如有其他疑问,请随时提出。

SQL 查询两个表数据,优先取最近时间,并计算时间差

原文地址: https://www.cveoy.top/t/topic/qqVI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录