phpmyadmin Mysql多个行中有一个值,该值在2或行中具有特定值,并且具有另一种状态

qni6mghb  于 2022-11-09  发布在  PHP
关注(0)|答案(1)|浏览(119)

我有一个表'Item_status_history',其中包含项目标识、状态、created_at和关联的order_id。此表保存项目所经历的状态历史记录。
我正在尝试查询具有多个状态“已发运”的所有item_id,并且在“已退回”之后必须至少有一个已发运状态。
在图片中,我们可以看到第一组和第三组是我需要的item_id。第四组数据有2个已发运,但它们在“已退回”之前。请注意,这些状态不是按created_at排序的。我需要检查在发送退货状态后是否有已发运状态。
我尝试了几种方法。我尝试选择所有item_id及其状态为“已发运”的id,并在子查询中使用它来再次查找状态为“已发运”但不等于相同id的id。但这不起作用

select item_id from item_status_history as ISH where ISH.status = "Shipped" and ISH.item_id in (Select
        item_id
    from item_status_history
    Where status = "Shipped" and item_status_history.id <> ISH.id
)

这我知道只是它的一部分,然后我需要找到从产生的身份证,哪些已返回,如果它是在发货后。
请参考下图

e4eetjau

e4eetjau1#

它一定是一些行的唯一顺序,也许是一些ID?但是我们可以假设,如果ShippedRetured是在同一时间比的,那么关于Shipped的比条件在Returned之后就满足了。

select item_id, 
   count(case when status='Shipped' then 1 end) number_of_shippments,
   max(case when status='Shipped' then created_at end) max_shiped,
   max(case when status='Returned' then created_at end) max_returned
   from item_status_history 
group by item_id
having 
   count(case when status='Shipped' then 1 end) > 1
   and 
   max(case when status='Shipped' then created_at end) >= 
   max(case when status='Returned' then created_at end)

相关问题