MYSQL 查询行组问题

标签 mysql null distinct

我正在尝试从我的 MySQL 数据库获取以下结果:

1) 我有一个包含以下 3 列的表格(time_intime_outreceipt_number)

2)考虑在此表中我插入了以下行:

+--------------------+---------------------+----------------+
|     time_in        |     time_out        | receipt_number |
+--------------------+---------------------+----------------+
|2016-12-24 13:33:33 | 2016-12-24 13:52:52 |  1             |
|2016-12-24 13:44:44 | 2016-12-24 13:55:55 |  1             |
|2016-12-24 13:33:33 | 2016-12-24 13:55:55 |  2             |
|2016-12-24 13:35:35 | NULL                |  2             |
+--------------------+---------------------+----------------+

3)我需要从这些行中获取所有在“time_out”中包含相同receipt_number的行中具有NOT NULL值的收据(分组依据) >”列,这意味着我只需要提取收据编号 2。

SELECT DISTINCT receipt_number FROM orders 
WHERE time_in >= CURDATE() AND time_in < CURDATE() + INTERVAL 1 DAY 
(time_out IS NOT NULL OR time_out != "")
ORDER BY time_in ASC

但是,上述查询会返回两个收据编号,因为“receipt_number 2”包含一个非 NULL 值

我怎样才能实现这个目标?

谢谢

最佳答案

这是一种方法:

SELECT t1.*
FROM receipt_number t1
INNER JOIN
(
    SELECT receipt_number
    FROM orders
    GROUP BY receipt_number
    HAVING COUNT(*) = SUM(CASE WHEN time_out IS NOT NULL THEN 1 ELSE 0 END)
) t2
    ON t1.receipt_number = t2.receipt_number

别名为 t2 的子查询查找包含非 NULL 超时值的所有记录的收据编号。然后,它用于将 orders 表限制为您想要查看的记录。

关于MYSQL 查询行组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41313175/

相关文章:

mysql - 如何使现有列中的重复项唯一?

java - 返回 null 或再次抛出异常

java - 指定应考虑进行不同计算的列

mysql - 从 SQLite 转换为 MySQL

php - Laravel - 无法使用 'Where' 查询过滤数据库

java - 如何在数组列表中打印字符串值而不打印空值?

java - 编译器对泛型方法的空参数的行为不同

mysql - sql : Counting growth over time

php - MYSQL/PHP - 从由一列区分的表记录中选择所有列

mysql - 额外防止数据库篡改