kk表
A B
a 2023/5/4
B 2023/5/3
cc表
a 2023/5/4 122
b 2023/5/2 111
b 2023/5/1 111
c 2023/5/2 122
v 2023/5/1 111
最终要的结果表
a 2023/5/4 122
b 2023/5/2 111
有A和B两个表
kk表中A列为唯一的值不重复,B为时间
cc表中A列与cc表中A列值一致但值有重复,B为时间
怎样通过kk和cc表关联,去除kk表中A B列在cc表中对应的C值,如何没有kk表中对应的时间,则取就近时间的C列值。如b由于cc表中没有对应时间的,则取就近2023-05-03的C值
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
可以使用 PostgreSQL 的 JOIN 语句和子查询完成该操作。具体步骤如下:
完整的 SQL 语句如下:
SELECT cc.A, cc.B, cc.C
FROM (
SELECT A, MAX(B) AS B
FROM kk
LEFT JOIN cc ON kk.A = cc.A AND kk.B >= cc.B
GROUP BY A
) AS t
JOIN cc ON t.A = cc.A AND t.B = cc.B
WHERE cc.C IS NOT NULL;
这条 SQL 语句将返回一个结果集,其中包含了 kk 表中 A 和 B 列在 cc 表中对应的 C 值。如果 kk 表中没有对应的时间,则会取最接近的时间的 C 值。
需要注意的是,如果 cc 表中存在多个时间相同的记录,则该 SQL 语句将返回所有这些记录,而不是仅返回其中的一条记录。如果需要返回最近的一条记录,则可以将子查询中的 MAX 函数改为 MIN 函数。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢