mysql - mysql查询根据两种逻辑过滤掉数据
问题描述
这是一个示例表:
sample_id | timestamp | p_id
============================================
62054 | 2018-09-25 10:18:15 | 2652
62054 | 2018-09-27 16:44:57 | 966
62046 | null | 1809
62046 | 2018-09-25 10:18:15 | 2097
我们需要过滤掉唯一的 sample_id 列,但逻辑是
如果时间戳列是 null,则返回那些 null 列数据
62046 | null | 1809
如果时间戳列不为空,则返回最新的时间戳列数据
62054 | 2018-09-27 16:44:57 | 966
因此,如果有人提供 sql 查询,那就太好了。
我们需要这样的东西,
WHERE
IF(
NOT NULL = all row group by sample_id,
row where cancelled_at is maximum,
null column
)
解决方案
此查询应为您提供所需的结果。它查找具有NULL
时间戳的行,或具有时间戳的行,该non-NULL
时间戳是该 sample_id 的最大时间戳,但前提是该 sample_id 没有具有NULL
时间戳的行:
SELECT *
FROM table1 t1
WHERE timestamp IS NULL OR
timestamp = (SELECT MAX(timestamp)
FROM table1 t2
WHERE t2.sample_id = t1.sample_id) AND
NOT EXISTS (SELECT *
FROM table1 t3
WHERE t3.sample_id = t1.sample_id AND
t3.timestamp IS NULL)
输出:
sample_id timestamp p_id
62054 2018-09-27T16:44:57Z 966
62046 (null) 1809
推荐阅读
- javascript - 在计数器函数上使用映射函数
- forms - 如何判断 vue.js 中的表单字段是否无效
- android - 将字节数组转换为pdf文件然后保存
- vba - 在 PowerPoint 演示者视图中手动运行宏
- html - jQuery获取多个属性值
- python - “在处理上述异常过程中,发生了另一个异常”,for循环中的第一个输入
- javascript - 使用 Redux+React 通过 useParams 从 API 获取 ID
- javascript - 重构异步 JavaScript 以兼容 IE
- android - Android使mp4视频文件更小
- python - pandas:TypeError:此 dtype 不允许缩减操作“argmax”