Doris 同一个SQL,筛选时间为过去的固定数据,每次筛选出的总条数都在变问题分析解决过程

收到业务反馈在使用报表时,筛选条件没有变,每次查询结果出的总条数都在变化

排查发现如果没有条件筛选,总条数不变
那问题就可能出在筛选项里,业务当时使用了两个筛选项
在这里插入图片描述
首先进行复现,复现确认确实存在问题,能稳定复现。
然后再找问题触发点
有多个筛选条件我们一个个试看哪个条件有问题,下单时间筛选单独筛的时候每次结果是一定的,一旦加上这个交易完成时间就每次都变化了,那证明交易完成时间这个字段的筛选是存在问题的
完整SQL就不贴了,太长了,贴关键行
交易完成时间的取值为

b.create_time as 交易完成时间,

交易完成时间用到的b表的SQL为

left join (
	select
		*
	from
		(
		select
			tos.order_id order_id,
			tos.create_time create_time,
			ROW_NUMBER () over(PARTITION by tos.order_id
		order by
			tos.create_time desc) as rn
		from
			prod.ods_order_order_status tos
		left join prod.ods_order_order_info toi on
			tos.order_id = toi.order_id
		where
			CASE
				WHEN toi.order_type = '邮寄回收' THEN tos.order_status_name = '交易完成'
				when toi.order_type = '门店回收' then tos.order_status_name = '待门店发货'
				ELSE tos.order_status_name = '待收货'
			END ) t
	where
		rn = 1 
) b ON
	oi.order_id = b.order_id

ROW_NUMBER () 函数为取当前行号,over(PARTITION by tos.order_id order by tos.create_time desc) 该表达式为根据tos.order_id分组,分组内根据tos.create_time降序排序
这样做的目的是取处于这个状态的最新一次记录的时间

使用group by 改写后恢复正常

left join (
	select
			tos.order_id order_id,
			max(tos.create_time) create_time
		from
			prod.ods_order_order_status tos
		left join prod.ods_order_order_info toi on
			tos.order_id = toi.order_id
		where  CASE
				WHEN toi.order_type = '邮寄回收' THEN tos.order_status_name = '交易完成'
				when toi.order_type = '门店回收' then tos.order_status_name = '待门店发货'
				ELSE tos.order_status_name = '待收货' END
		group by tos.order_id 
                     
) b ON
	oi.order_id = b.order_id

memo:粗略看了下网上也没啥相关答疑,作为java开发还有需求要做没有时间去追究其中原有,暂不考虑深入追究原因了。有懂的大数据老哥帮忙在评论区解答下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HumorChen99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值