我有一个像这样的 Postgres 表,其中包含设备 ID、时间戳和当时设备的状态:
dev_id | timestamp | status
----------------------------------------
1 | 2020-08-06 23:00:00 | 1
2 | 2020-08-06 23:00:00 | 0
3 | 2020-08-06 23:00:00 | 1
2 | 2020-08-06 23:05:00 | 1
3 | 2020-08-06 23:05:00 | 0
1 | 2020-08-06 23:10:00 | 0
我想在他们各自的最新时间戳中查看有多少设备正在运行,有多少没有运行。在 Postgres 中,我可以DISTINCT ON
像这样使用和编写查询:
SELECT status, COUNT(status)
FROM
(
SELECT DISTINCT ON (dev_id) dev_id,
timestamp,
status
FROM
sample_metrics_data
ORDER BY
dev_id,
timestamp DESC
) sub
GROUP BY status;
这将导致:
value | count
---------------
0 | 2
1 | 1
(2 个设备,#1 和 #3,状态为 0,而 1,#2,状态为 1。)如何在 CubeJS 中创建类似的东西?支持,如果不支持,解决方法是DISTINCT ON
什么?
或者,可以使用内部联接编写查询:
SELECT status,
Count(status)
FROM sample_metrics_data
JOIN (SELECT dev_id id,
Max(timestamp) ts
FROM sample_metrics_data
GROUP BY dev_id) max_ts
ON timestamp = max_ts.ts
AND dev_id = max_ts.id
GROUP BY status;
我需要进行内部连接,但似乎只有 LEFT JOIN 可用。