sql - SQL合并最小时间差
问题描述
我的 SQL 语句有点超出我的技能水平。在 DB2 数据仓库中运行它。
我需要根据一些 ID 以及 TABLE1 中的日期 (STARTDATE) 和 TABLE2 中的日期 (TIME_SENT) 之间的最小时间差将 TABLE2 中的两列(CODE1 和 CODE2)加入到 TABLE1 中。下面的语句显示了我正在尝试做的事情,但是对group by
andhaving
子句的排序有问题。
SELECT *
FROM TABLE1
LEFT JOIN (SELECT B.ID1, B.ID2, D.CODE1, D.CODE2
FROM TABLE1 B, TABLE2 D
WHERE D.STATUS = '7'
GROUP BY B.ID1, B.ID2
HAVING ABS(B.STARTDATE - D.TIME_SENT) = MIN(ABS(B.STARTDATE - D.TIME_SENT)) TABLE2
ON TABLE1.ID1 = TABLE2.ID1
AND TABLE1.ID2 = TABLE2.ID2;
感谢您对此的任何帮助。
结构表1:
---------------------------------------------------------
| ID1 (VARCHAR) | ID2 (VARCHAR) | STARTDATE (TIMESTAMP) |
---------------------------------------------------------
结构表2:
----------------------------------------------------------------------------------------------------------------
| ID1 (VARCHAR) | ID2 (VARCHAR) | TIME_SENT (TIMESTAMP) | STATUS (INTEGER) | CODE1 (VARCHAR) | CODE2 (VARCHAR) |
----------------------------------------------------------------------------------------------------------------
结构输出:
---------------------------------------------------------------------------------------------
| ID1 (VARCHAR) | ID2 (VARCHAR) | STARTDATE (TIMESTAMP) | CODE1 (VARCHAR) | CODE2 (VARCHAR) |
---------------------------------------------------------------------------------------------
因此,每个唯一 IDTABLE2
可以有几个不同的代码对,但我只想保留最接近的代码对。(CODE1,CODE2)
(ID1,ID2)
TABLE2.TIME_SENT
TABLE1.STARTDATE
解决方案
我认为您不能在内部查询中选择 CODE1 和 CODE2,因为它们不在 group by 或聚合函数中。我认为您需要一个内部查询来找到给定 id 配对的最小时间差。像这样的东西:
SELECT *
FROM TABLE1 B
LEFT OUTER JOIN TABLE2 D
ON B.ID1 = D.ID1
AND B.ID2 = D.ID2
AND D.STATUS = '7'
WHERE D.ID1 IS NULL
OR ABS(B.STARTDATE - D.TIME_SENT) = (SELECT MIN(ABS(E.STARTDATE - F.TIME_SENT))
FROM TABLE1 E
INNER JOIN TABLE2 F
ON E.ID1 = F.ID1
AND E.ID2 = F.ID2
AND F.STATUS = '7'
WHERE E.ID1 = B.ID1
AND E.ID2 = B.ID2
GROUP BY
E.ID1
,E.ID2);
我假设您在 TABLE1 中有一些值在 TABLE2 中没有匹配项,但您仍然希望返回。
推荐阅读
- fonts - 通过 Theme-UI 使用本地自定义字体
- google-apps-script - 使用 Google Apps 脚本在 Google Drive 中以 PDF 格式下载网页
- spring - StepScope 与 JobScope
- android - MPandroidChart 固定竖线
- gitlab - GitLab CI - 在工作中使用特定关键字
- python - 查找两个列表的排序以匹配总和
- python - 有没有办法计算 Python 中的线段数?
- ipad - 从 TabBarController 调用带有 Button 的 ViewController
- ios - [WKInterfaceController pushControllerWithName:context:]:从主队列以外的队列调用。这不受支持,将来可能会失败(iOS)
- reactjs - ReactJS:使用 AXIOS 进行 API 调用并在选择中使用