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

如何用MySQL查询存入后一周内未取出的物品数据?

解决方案

要找出存入(Store)后未在一周内完成取出(Withdraw)的物品,可通过以下两种常用SQL方案实现:

方法1:自连接(兼容多数SQL数据库)

通过将operation表自身关联,匹配同一articleNumber的存入与取出记录,筛选出无合规取出记录的存入数据:

SELECT 
    s.idOperation,
    s.articleNumber,
    s.articleLabel,
    s.userIdentifier AS store_user_id,
    s.userName AS store_user_name,
    s.dateTime AS store_time,
    w.idOperation AS withdraw_id,
    w.userIdentifier AS withdraw_user_id,
    w.userName AS withdraw_user_name,
    w.dateTime AS withdraw_time
FROM operation s
LEFT JOIN operation w 
    ON s.articleNumber = w.articleNumber
    AND w.actionName = 'Withdraw'
    AND w.dateTime <= DATE_ADD(s.dateTime, INTERVAL 7 DAY)
WHERE s.actionName = 'Store'
AND w.idOperation IS NULL;

逻辑说明

  • 以所有存入记录作为主表(别名s)
  • 左连接自身表(别名w),仅匹配同一物品、操作类型为取出且时间在存入后7天内的记录
  • 最终筛选出未匹配到合规取出记录的存入数据,即为需排查的目标

方法2:窗口函数(支持窗口函数的数据库:MySQL 8.0+/PostgreSQL等)

利用LEAD()窗口函数获取同一物品的下一条操作信息,直接判断是否为合规取出:

WITH operation_with_next_action AS (
    SELECT 
        *,
        LEAD(dateTime) OVER (PARTITION BY articleNumber ORDER BY dateTime) AS next_action_time,
        LEAD(actionName) OVER (PARTITION BY articleNumber ORDER BY dateTime) AS next_action_type
    FROM operation
    WHERE actionName IN ('Store', 'Withdraw')
)
SELECT 
    idOperation,
    articleNumber,
    articleLabel,
    userIdentifier,
    userName,
    dateTime AS store_time,
    next_action_time,
    next_action_type
FROM operation_with_next_action
WHERE actionName = 'Store'
AND (
    next_action_type IS NULL 
    OR next_action_type != 'Withdraw' 
    OR next_action_time > DATE_ADD(dateTime, INTERVAL 7 DAY)
);

逻辑说明

  • 先用CTE给每条记录添加上同一物品的下一条操作时间与类型
  • 筛选存入记录,且满足以下任一条件的即为目标数据:
    • 无后续操作
    • 后续操作不是取出
    • 后续取出时间超过存入时间7天

结果示例

执行上述任一语句,将返回Article_02的存入记录,即你需要排查的未在一周内取出的物品数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:02:07