求SQL,两张表的连接查询

两张表(g表,P表),如果日期相同,直接关联取值,如果日期字段g表,而P表无对应相同日期的值,取P表与G表日期最近的值 ,求SQL

你这是什么业务,日期是关联条件?用左连接不行吗,以g表作为主表左连接查询。

问题追记

1.日期表(G表)
gdate
2019-10-23
2019-10-24
2019-10-25
2019-10-26
2019-10-27
2019-10-28
2019-10-29
2019-10-30
2019-10-31

2.价格表(P表):
pub_date aver_price ID
2019-10-23 532 1000000011
2019-10-24 528 1000000071
2019-10-25 528 1000000131
2019-10-28 527 1000000191
2019-10-29 526 1000000301
2019-10-30 534 1000002161
2019-10-31 516 1000003541

要求结果

 

select distinct
	   t1.gdate,
	   first_value(t2.aver_price) over(order by t2.pub_date desc),
	   first_value(t2.id) over(order by t2.pub_date desc)
  from g t1, 
	   p t2
 where t1.gdate >= t2.pub_date

 

解决思路:若是mysql,两个方案,(1)跑一遍存储过程或写个简短的代码把数据直,接填上;(2)sql里复杂的子查询,数据量大的话性能绝对不行,所以不建议。

若不是mysql,是其他分布式数据库olap数据库,那就去找找又没有简便支持的函数,比如clickhouse就支持读取前几行的某个字段值赋值到当前行,就很简单。

 


个人还是建议,如果没有简短的函数支持,那还是用方法(1),性能和效率都好

填数据时如果考虑的是不想污染原来的数据,那就增加字段标记呗

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632