这是我的查询,我在其中选择 carton_id
的计数,但如果此纸箱有时被转移到其“assign_id”,那么我希望将其从该计数中删除。
我不能使用“==”,因为 allocate_id 始终是逗号分隔的字符串,如“24,25”,但 divert_id 将是其中之一或“999”
SELECT
assign_id, COUNT(DISTINCT(carton_id))
FROM
induction
WHERE
update_timestamp > '2019-11-21 00:00:00' and update_timestamp < '2019-11-22 00:00:00'
AND LOCATE(divert_id, assign_id) = 0
AND sorter_id = 2
GROUP BY assign_id
ORDER BY assign_id;
carton | assign_id | divert_id |
abc123 | 24,26 | 999 |
abc123 | 24,26 | 999 |
abc123 | 24,26 | 999 |
abc123 | 24,26 | 24 |
所以结果应该是:
24,26 | 0
但我得到的计数是 1。
最佳答案
如果您使用 LOCATE,它会在分配 id 中获取子字符串 divert_id,在本例中为 24,26 中的 24,结果 LOCATE(divert_id, allocate_id) 不等于 0。还要按 allocate_id 和 divert_id 检查组。希望这会有所帮助。
关于MySQL:如果值发生变化,则从计数中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58994986/