jq で日時を指定して json の値を合計したい

備忘録。

IoT デバイスやセンサーから送られてくる json データを手元で簡単に集計したい。例えば、次のようなデータが送られてくる。これの score の合計を算出したい。

{
  "data": [
    {
      "datetime": "2025-12-02T09:00:10+09:00",
      "score": 1
    },
    {
      "datetime": "2025-12-02T09:00:45+09:00",
      "score": 0.5
    },
    {
      "datetime": "2025-11-26T08:01:05+09:00",
      "score": 2
    },
    {
      "datetime": "2025-11-26T08:01:05+09:00",
      "score": null
    },
    {
      "datetime": "2025-11-26T08:02:05+09:00",
      "score": 1.5
    }
    ...
  ]
}

すべての score を合計する

jq '[.data[].score // 0] | add' data.json

// は jq のデフォルト演算子で、左の式が null または false の場合は右の式を評価する。[...] | add で配列にまとめて合計する。

日時の範囲を指定して score を合計する

datetime の範囲を指定するパターン。条件に合致する要素を select で抽出する。サンプルデータでは時系列でソートしてるけど、今回の場合は特にソートされている必要はない。

jq '[
  .data[]
  | select(.datetime >= "2025-12-02T09:00:00+09:00" and .datetime <= "2025-12-02T09:00:59+09:00")
  | .score // 0
] | add' data.json

現場からは以上です。