SQL 只获取列中所有值的项目

SQL get only items with all values in column

我有sql这样的查询:

SELECT m.id, 
e.id AS extraction_id, 
row_number() OVER (PARTITION BY m.id ORDER BY e.start_time DESC) as 
   start_date_rank,
e.end_time AS e_end_time, 
e.status AS e_status
FROM monitors m 
LEFT JOIN extractions e 
ON m.id = e.monitor_id 
WHERE m.is_deleted is FALSE

我得到这些行:

我的问题是,我只需要这些 ID,其中所有 e_end_time 列都是时间戳。对于这个例子,它只有 id 2。有人可以帮我吗,怎么做?

Id 1 有时间戳,但只在第一行。第二行和第三行在 e_end_time 列中有 null,这就是为什么不应该返回它的原因。

在 WHERE 子句中添加 NOT IN 子查询

WHERE m.is_deleted is FALSE
  AND m.id NOT IN (SELECT DISTINCT monitor_id 
                   FROM extractions
                   WHERE end_time IS NULL)

将此添加到 where 子句应删除结束时间为空的 ID

and m.id not in (select id from monitors where e_end_time is null)
SELECT m.id, 
e.id AS extraction_id, 
row_number() OVER (PARTITION BY m.id ORDER BY e.start_time DESC) as 
   start_date_rank,
e.end_time AS e_end_time, 
e.status AS e_status
FROM monitors m 
LEFT JOIN extractions e 
ON m.id = e.monitor_id 
WHERE m.is_deleted is FALSE
and m.id not in (select id from monitors where e_end_time is null)

你可以直接使用 group by:

SELECT m.id
FROM monitors m LEFT JOIN
     extractions e 
     ON m.id = e.monitor_id 
WHERE m.is_deleted is FALSE
GROUP BY m.id
HAVING COUNT(*) = COUNT(e.end_time);
SELECT m.id, 
e.id AS extraction_id, 
row_number() OVER (PARTITION BY m.id ORDER BY e.start_time DESC) as 
   start_date_rank,
e.end_time AS e_end_time, 
e.status AS e_status
FROM monitors m 
LEFT JOIN extractions e 
ON m.id = e.monitor_id 
WHERE m.is_deleted is FALSE AND DATALENGTH(e.end_time)<>0

DATALENGTH() 函数returns 用于表示表达式的字节数。

DataLength 是解决您的问题的最佳方法,因为它还会删除您的空白 Space...

谢谢!!!