mysql - 如何从 A 列中选择所有不同的值,这些值在 mySQL 的 B 列中具有特定值

标签 mysql

问题介绍: 我正在开发条形码跟踪系统,该系统沿生产线放置 5 个扫描站,从 StationID 1 开始,最后一个站是 StationID 5。每个条形码对应于沿生产线制造的一个项目。有些元素,例如条码为 95821 的元素,没有经过预处理,因此不会被 StationID 1 扫描。

问题: 我很难构建一个查询来显示所有已通过 StationID 2 但尚未达到 StationID 3、4 或 5 的条形码: 列出所有条形码: - 已通过 StationID 1 和 StationID 2(如 95813、95814、95823、95824) - 仅通过 StationID 2(如 95821),因为它没有经过预处理

这是一个名为 scanstations 的示例表:

+---------+-----------+----------+
| Barcode | StationID |   Time   |
+---------+-----------+----------+
|   95813 |         1 | 11:30:01 |
|   95814 |         1 | 11:30:05 |
|   95823 |         1 | 11:30:10 |
|   95824 |         1 | 11:30:20 |
|   95821 |         2 | 11:35:10 |
|   95813 |         2 | 11:40:01 |
|   95814 |         2 | 11:40:02 |
|   95823 |         2 | 11:30:10 |
|   95824 |         2 | 11:30:20 |
|   95813 |         3 | 11:40:01 |
|   95814 |         3 | 11:40:02 |
|   95813 |         4 | 11:45:10 |
|   95814 |         4 | 11:45:30 |
|   95813 |         5 | 11:47:20 |
+---------+-----------+----------+

预期结果集:

+---------+
| Barcode |
+---------+
|   95821 |
|   95823 |
|   95824 |
+---------+

我使用以下查询列出所有已被 StationID 1 扫描过且未被任何其他站扫描过的条形码。

SELECT 
    Barcode
FROM
    scanstations s
GROUP BY Barcode
HAVING SUM(CASE
    WHEN s.StationID = 1 THEN 0
    ELSE 1
END) = 0

最佳答案

我不明白为什么每个人都想复杂化,使用查询并不容易

SELECT Barcode FROM scanstations GROUP BY Barcode HAVING MAX(StationID) = 2

如果你想列出所有 StationID 1 扫描过但没有被任何其他站扫描过的条码,使用 HAVING MAX(StationID) = 1 .

如果要列出所有通过 StationID 1 和 StationID 2 的条形码,请使用 HAVING MAX(StationID) = 2 AND COUNT(*) = MAX(StationID)

如果你只想列出 StationID 为 2 的所有条形码,请使用 HAVING MAX(StationID) = 2 AND COUNT(*) < MAX(StationID)

关于mysql - 如何从 A 列中选择所有不同的值,这些值在 mySQL 的 B 列中具有特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58074638/

相关文章:

java - 驱动程序 "com.mysql.jdbc.Driver"不支持 url "null"

php - 与当前日期比较时,通过多个元键查询帖子不起作用

php - 将多行合并为一行的最有效方法

php - Joomla 中的 Mysql : Efficient multiple selects in one query and possible evaluation

mysql - 在 MySql 中引用同一个表作为 UPDATE 的目标和数据源

php - 从 MySQL 表并发获取任务

php - mysql 检查最后 x 个帖子的用户 ID

PHP插入\到sql表

mysql - mysql如何连接表

Mysql COUNT子查询