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...
谢谢!!!
我有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...
谢谢!!!