Sql 选择两个时间序列的划分
我的第一个问题是: 在输出端: 第二个问题: 输出:Sql 选择两个时间序列的划分,sql,postgresql,Sql,Postgresql,我的第一个问题是: 在输出端: 第二个问题: 输出: 每个查询都有相同的日期周期。我想选择开始时间、结束时间和x/y,因此,x和y之间的基本区别在于tm.sid在另一个表中/不在另一个表中 您可以使用以下方法同时计算这两个参数: 或者,对于较旧的PostgreSQL 9.3或更早版本: SELECT ..., COUNT(CASE WHEN tm.sid NOT IN (SELECT sid FROM session_msg) THEN 1 END) AS x, CO
每个查询都有相同的日期周期。我想选择开始时间、结束时间和x/y,因此,x和y之间的基本区别在于tm.sid在另一个表中/不在另一个表中 您可以使用以下方法同时计算这两个参数: 或者,对于较旧的PostgreSQL 9.3或更早版本:
SELECT ...,
COUNT(CASE WHEN tm.sid NOT IN (SELECT sid FROM session_msg) THEN 1 END) AS x,
COUNT(CASE WHEN tm.sid IN (SELECT sid FROM session_msg) THEN 1 END) AS y
我试图修复SQL的格式,但是SO接口声称我的帖子有太多的代码。我不明白我应该如何在查询中使用它。你能解释一下吗?@PetroProkopovych而不是COUNT*。您不需要两个单独的查询,您只能使用一个在WHERE子句中不过滤tm.sid的查询,而在…中使用tm.sid[not],但它不起作用,因为我在定义tm之前使用了tm.sid
WITH one_day_intervals AS (
SELECT date_trunc('day', (current_date-offs-2)) AS start_time,
date_trunc('day', (current_date-offs-1)) AS end_time
FROM generate_series(1, 7, 1) AS offs
)
SELECT start_time, end_time, y
FROM (
SELECT i.start_time AS start_time, i.end_time AS end_time, count(*) AS y
FROM (
SELECT created
FROM tracking_msg AS tm
WHERE tm.cid='ae69123c-cb29-420b-9a65-bbe6ae156f57' AND tm.sid IN (SELECT sid FROM session_msg)
) AS sub1
RIGHT JOIN one_day_intervals AS i ON sub1.created >= i.start_time AND sub1.created < i.end_time
GROUP BY i.start_time, i.end_time ORDER BY i.start_time
) AS sub2;
SELECT ...,
COUNT(*) FILTER (WHERE tm.sid NOT IN (SELECT sid FROM session_msg)) AS x,
COUNT(*) FILTER (WHERE tm.sid IN (SELECT sid FROM session_msg)) AS y
SELECT ...,
COUNT(CASE WHEN tm.sid NOT IN (SELECT sid FROM session_msg) THEN 1 END) AS x,
COUNT(CASE WHEN tm.sid IN (SELECT sid FROM session_msg) THEN 1 END) AS y