You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询昨日在LOST位置今日转移的库存的SQL语句问题求助

问题分析与解决方案

你的原查询逻辑存在矛盾:要求同一条记录的InventoryDate同时等于昨天和今天,这显然不可能,所以返回空结果。要实现需求,需要关联同一库存的昨日和今日两条记录,判断它们的位置变化。

假设你的表中有唯一标识单个库存的字段(比如InventoryID),以下是两种可行的写法:

方法1:自连接查询

通过将表自身连接,匹配同一库存的昨日和今日记录:

SELECT 
    t1.InventoryID,
    t1.LocationName AS 昨日位置,
    t2.LocationName AS 今日位置,
    t1.InventoryDate AS 昨日日期,
    t2.InventoryDate AS 今日日期
FROM 
    InventoryByDate t1
INNER JOIN 
    InventoryByDate t2 ON t1.InventoryID = t2.InventoryID
WHERE 
    -- 昨日库存处于LOST位置
    t1.InventoryDate = DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
    AND t1.LocationName = 'LOST'
    -- 今日库存不在LOST位置
    AND t2.InventoryDate = DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
    AND t2.LocationName != 'LOST';

方法2:EXISTS子查询

通过子查询验证同一库存昨日是否处于LOST位置:

SELECT 
    *
FROM 
    InventoryByDate t
WHERE 
    -- 筛选今日非LOST的库存
    t.InventoryDate = DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
    AND t.LocationName != 'LOST'
    -- 验证该库存昨日处于LOST位置
    AND EXISTS (
        SELECT 1
        FROM InventoryByDate t_prev
        WHERE t_prev.InventoryID = t.InventoryID
            AND t_prev.InventoryDate = DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
            AND t_prev.LocationName = 'LOST'
    );

注意事项

如果表中没有InventoryID这类唯一标识,需要用商品编号+批次号等组合字段来关联同一库存的不同日期记录,确保匹配的是同一个库存的前后两日数据。

内容的提问来源于stack exchange,提问作者Logan Simons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:35:29