指定日期园区弹珠库存查询SQL语句问题求助
园区弹珠库存查询需求与SQL实现
需求
获取指定日期(@date = '2023-12-20')下园区1或园区6的弹珠库存,核心规则:截至2023-12-20已到达目标园区的弹珠,需剔除截至该日期已从该园区运出的弹珠。
相关表结构
- 表
LettreVoiture:包含字段idlv(运单ID)、lieuxdepart(出发园区)、lieuxarriver(到达园区)、datedepart(出发日期)、datearrive(到达日期) - 表
LettreVoitureLigne:包含字段idlvr(运单明细ID)、idlv(关联运单ID)、idbille(关联弹珠ID) - 表
bille:包含字段idbille(弹珠ID)
园区时间参数
- 园区1:
- 出发日期:
'2023-12-12' - 到达日期:
'2023-12-20'
- 出发日期:
- 园区6:
- 到达日期:
'2023-12-14' - 出发日期:
'2023-12-18'
- 到达日期:
已编写的SQL语句
SELECT DISTINCT b.idpreparation AS idb, es.description_essence, pp.codebar_grume, pp.num_colis, b.affectation_bil, l.description_licence, l.idlicence, pp.longueur_prepa AS longu, pp.diam_gb_prepa AS GB, pp.diam_pb_prepa AS PB, pp.volume_prepa AS volume, '', 'Arrivée par LV' AS etat, LV.datelv, LV.datearriverlv AS datess, LV.idlv FROM lettre_voiture_ligne_grume LVR JOIN lettre_voiture_grume LV ON LV.idlv = LVR.idlv JOIN billage b ON b.idpreparation = LVR.idbille JOIN preparation_pied pp ON pp.idpreparation = b.idpreparation LEFT JOIN essence es ON es.idessence = pp.idessence LEFT JOIN licence l ON l.idlicence = pp.idlicence WHERE LV.datearriverlv <= '2023-12-20' AND LV.lieuxarrive = 6 AND pp.idpreparation NOT IN (SELECT idbille FROM lettre_voiture_ligne_grume LVR JOIN lettre_voiture_grume LV ON LV.idlv = LVR.idlv WHERE LV.lieuxdepart = 6 AND LV.datelv <= '2023-12-20')
补充说明
当前SQL仅针对园区6实现了需求逻辑:筛选截至2023-12-20已到达园区6的弹珠,同时排除掉截至该日期已从园区6运出的弹珠。若要覆盖园区1的需求,需调整WHERE条件,新增园区1的判断逻辑,示例如下:
SELECT DISTINCT b.idpreparation AS idb, es.description_essence, pp.codebar_grume, pp.num_colis, b.affectation_bil, l.description_licence, l.idlicence, pp.longueur_prepa AS longu, pp.diam_gb_prepa AS GB, pp.diam_pb_prepa AS PB, pp.volume_prepa AS volume, '', 'Arrivée par LV' AS etat, LV.datelv, LV.datearriverlv AS datess, LV.idlv FROM lettre_voiture_ligne_grume LVR JOIN lettre_voiture_grume LV ON LV.idlv = LVR.idlv JOIN billage b ON b.idpreparation = LVR.idbille JOIN preparation_pied pp ON pp.idpreparation = b.idpreparation LEFT JOIN essence es ON es.idessence = pp.idessence LEFT JOIN licence l ON l.idlicence = pp.idlicence WHERE -- 匹配到达园区1或6且在指定日期前到达的记录 ((LV.lieuxarrive = 1 AND LV.datearriverlv <= '2023-12-20') OR (LV.lieuxarrive = 6 AND LV.datearriverlv <= '2023-12-20')) -- 排除已从对应园区在指定日期前运出的弹珠 AND pp.idpreparation NOT IN ( SELECT idbille FROM lettre_voiture_ligne_grume LVR JOIN lettre_voiture_grume LV ON LV.idlv = LVR.idlv WHERE (LV.lieuxdepart = 1 AND LV.datelv <= '2023-12-20') OR (LV.lieuxdepart = 6 AND LV.datelv <= '2023-12-20') )
内容的提问来源于stack exchange,提问作者RL79
相关产品推荐
相关产品推荐

