MySQL,查询过滤出具有相同时间状态的结果

问题描述 投票:0回答:1
 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';

我想将相同的时间状态分组到列中,并为分组的每个多列仅返回一个。

mysql grafana amazon-timestream
1个回答
0
投票

您可以为时间和 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;
© www.soinside.com 2019 - 2024. All rights reserved.