我正在尝试从我的 MySQL 数据库获取以下结果:
1) 我有一个包含以下 3 列的表格(time_in
、time_out
、receipt_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/