坚持创建一个正常工作的 0/1 标志。终于屈服

Stuck creating a 0/1 flag that works correctly. Finally giving in

大家晚上好。

我正在尝试创建一个非常基本的 case 语句,它在 mySQL 中将三个场景分为 0 或 1。 我在下面的参考 table link 中找到了三个字段。

本质上,我试图将 StatusCD 为 'I' 和 'O' 的任何 ProductID 都存储为 1,只有 'I' 为 1,然后只有 'O' 结果,没有相应的 'I' 作为 0。此数据显示的是产品进入仓库 ('I'),然后离开仓库 ('O')。我还有其他捕获日期差异的字段,但最终我试图创建一个标志来忽略我们只有 Product#'s 和 'O' statusCD 的情况,这表明他们到达仓库没有适当记录并且会扭曲我们的“仓库年龄”桶。

非常感谢任何见解!

参考 Table 字段:

Date       | ProductID | StatusCD
2021-01-01 | U1000     | I
2021-01-10 | U1000     | O
2021-01-10 | U2000     | I
2021-01-15 | U3000     | O

假设你想保留每条原始记录,你可以在这里使用解析函数:

SELECT Date, ProductID, StatusCD,
       CASE WHEN SUM(StatusCD <> 'O') OVER (PARTITION BY ProductID) = 0
            THEN 0 ELSE 1 END As Label
FROM yourTable
ORDER BY Date;

Demo

对于早于 8+ 的 MySQL 版本:

SELECT t1.Date, t1.ProductID, t1.StatusCD,
       CASE WHEN t2.OpenCount = 0 THEN 0 ELSE 1 END AS Label
FROM yourTable t1
INNER JOIN
(
    SELECT ProductID, SUM(StatusCD <> 'O') AS OpenCount
    FROM yourTable
    GROUP BY ProductID
) t2
    ON t2.ProductID = t1.ProductID
ORDER BY
    t1.Date;

Demo