晚上好。
我正在尝试创建一个非常基本的case语句,它将mySQL中带有0或1的三个场景组合在一起。我在下面的参考表链接中找到了三个字段。
本质上,我尝试存储任何StatusCD为“I”且“O”为1的ProductID,只有“I”为1,然后是任何只有“O”结果且没有相应“I”为0的StatusCD。此数据显示的是产品进入仓库(“I”),然后离开仓库(“O”)。我还有其他捕获日期差异的字段,但最终我试图创建一个标记来忽略以下情况:我们只有产品#的statusCD带有'O‘,这将表明它们到达仓库的日志没有正确记录,并会使我们的“仓库中的年龄”桶倾斜。
任何见解都是非常感谢的!
带字段的引用表:
Date | ProductID | StatusCD
2021-01-01 | U1000 | I
2021-01-10 | U1000 | O
2021-01-10 | U2000 | I
2021-01-15 | U3000 | O发布于 2021-04-19 10:23:13
假设您想保留每条原始记录,您可以在这里使用分析函数:
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;

对于早于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;
https://stackoverflow.com/questions/67155162
复制相似问题