使用几年前Google的“电表”示例,我们将:

MeterID (Datastore Key) | MeterDate (Date) | ReceivedDate (Date) | Reading (double)

假设我们收到了更新的信息(例如,校准失败,仪表已损坏等),并使用相同的MeterID和MeterDate放在新行中,使用窗口函数获取每个ID + MeterDate对的最新接收日期,只会花费更多如果该对有多个记录,对吗?

不幸的是,我们没有SQL专家,但是查询看起来应该像这样:

SELECT
  meterDate,
  NTH_VALUE(reading, 1) OVER (PARTITION BY meterDate ORDER BY receivedDate DESC) AS reading
FROM [BogusBQ:TableID]
WHERE meterID = {ID}
  AND meterDate BETWEEN {startDate} AND {endDate}


我在这里还缺少其他重要的东西吗?添加“ AND NOT IS_NAN(reading)”是否会使Window函数返回下一行,或者什么都不返回? (然后,我们可以使用NaN表示“已删除”。)

最佳答案

您的SQL看起来不错。几个建议:
-我将使用FIRST_VALUE更加明确,但应该可以。
-如果可以-请使用NULL代替NaN。最好还是添加新的BOOLEAN列以标记已删除的行。

07-27 13:26