mysql - 在动态日期范围之间提取数据
问题描述
下面是查询,其中sf.flex_start_date
&sf.flex_end_date
是 的变量mis.seller_org_id
。需要帮助才能获取seller_org_id
特定的数据date range
。即卖方的数据应该只在它之后start date
和之前end date
可用(数据在开始日期之前和结束日期之后也可用,但需要该日期范围之间的数据,并且该范围因不同而不同seller_org_id
)。
任何人都可以帮忙吗?
SELECT mis.order_id
,mis.order_status
,mis.seller_org_id
,mis.category
,mis.order_date
,log.rts_date
,log.picked_up_time
,sf.seller_name
,sf.parent_seller_org_id
,sf.parent_seller_name
,sf.seller_zone
,sf.seller_city
,sf.flex_supervisor_name
,sf.flex_start_date
,sf.flex_end_date
,sf.flex_status
FROM common.mis_table mis
LEFT JOIN logistics.logistics_data_full log ON mis.order_id = log.seller_order_id
LEFT JOIN ds_csv_seller_flex_seller_list sf ON mis.seller_org_id = sf.seller_org_id
WHERE mis.category NOT IN (
'Food-FMCG'
,'Pharma'
,'Fullfilment Material'
,'Meat'
,'Fresh'
)
AND mis.fulfillment_center = 'FFC_SELLER'
AND mis.order_date >= '2020-07-01'
AND mis.order_date BETWEEN sf.flex_start_date
AND sf.flex_end_date
解决方案
您的where
子句正在将您的子句left join
变成内部连接。with left join
s 第一个表上的所有条件都应该在where
子句中。后续表的任何条件都应在on
子句中:
select . . .
from common.mis_table mis left join
logistics.logistics_data_full log
on mis.order_id = log.seller_order_id left join
ds_csv_seller_flex_seller_list sf
on mis.seller_org_id = sf.seller_org_id and
mis.order_date between sf.flex_start_date and sf.flex_end_date
where mis.category not in ('Food-FMCG', 'Pharma', 'Fullfilment Material', 'Meat', 'Fresh')
mis.fulfillment_center = 'FFC_SELLER' and
mis.order_date >= '2020-07-01'
您的查询中发生的情况是,left join
可能会返回NULL
不匹配的行——或者,更有可能的是,存在匹配项,但所有日期范围值都超出了您想要的范围。在任何一种情况下,where
子句都会过滤掉这些值。
推荐阅读
- node.js - 使用 nodejs、multer 和 cloudinary 上传大型视频文件
- asp.net-core - 如何使用 wsdl 文件从 SAP 导入数据以及如何使用从它生成的代理类
- liferay - Liferay Commerce:Mini Cart 上的 Product Quantity Change 是否会引发任何事件?
- r - 在中断 r markdown html 之前打印更多列
- html - Angular:如何将 href 标签与 json 键绑定?
- jql - 如何在 JIRA 中获取具有特定摘要的故事、子任务的特定受让人?
- apache-kafka - NestJS CQRS 使用 Kafka 作为 Eventbroker
- c# - RSACryptoServiceProvider.VerifyData 在 .Net5.0 中总是返回 false
- javascript - 匹配器错误:接收到的值必须是模拟或间谍函数
- azure-functions - 如何在 Azure Functions 中设置 TrackExceptionsAsExceptionTelemetry?