id. | time |unitConsumed | smartMeterId
===========================================================
620 | 2024-09-25 10:18:15 | 52 | sss
620 | 2024-09-27 16:44:57 | 966 | sss
620 | 2024-09-27 16:44:57 | 966 | sss
620 | 2024-09-25 10:18:15 | 52 | sss
在尝试计算每米消耗的单位时,某些输入出现两次,这是非常明显的,因为它们具有相同的时间窗口,即在列时间上,它们具有相同的时间戳。 如何过滤掉具有相同时间戳的多个日志。
WITH RankedRows AS (
SELECT
id,
smartMeterId,
unitConsumed,
time,
ROW_NUMBER() OVER (PARTITION BY smartMeterId, time ORDER BY time) AS row_num
FROM
demodb.SmartMeterUsageHistory
)
SELECT
id,
smartMeterId,
unitConsumed,
time
FROM
RankedRows
WHERE
row_num = 1 AND smartMeterId = 'sss';
我想将相同的时间状态分组到列中,并为分组的每个多列仅返回一个。
您可以为时间和 Id 的组合添加唯一约束(假设每个米都是不同的)。也许尝试这样的事情
WITH RankedRows AS (
SELECT
id,
smartMeterId,
unitConsumed,
time,
ROW_NUMBER() OVER (PARTITION BY smartMeterId, time ORDER BY time) AS row_num
FROM
demodb.SmartMeterUsageHistory
)
SELECT DISTINCT ON (smartMeterId, time)
id,
smartMeterId,
unitConsumed,
time
FROM
RankedRows
WHERE
smartMeterId = 'sss'
ORDER BY
smartMeterId,
time;