ちょっとはまったことがあったのでメモです。
Stream Analyticsには、指定した並び順で並び替えたTopいくつかを返すCollectTop関数というものがあります。
こいつでCollectTop(1)とかやって一番上の1件だけ取ろうと目論んでたら同率一位が複数件あると複数件かえしてくれましたorz ということで、絶対1件ほしいときはCollectTopに指定する並び順を絶対に1つだけになるように気を付けないといけないなということを学んだ今日この頃でした。
どうしても1つ、以下のようにArrayIndexで0番目にきたものだけにWHEREで絞るのも手です。
[ { "id": 1, "value": 10, "time": "2015-09-01T15:00:00.0000000Z" }, { "id": 1, "value": 10, "time": "2015-09-01T15:00:00.0000000Z" }, { "id": 12, "value": 10, "time": "2015-09-01T15:00:00.0000000Z" }, ]
こんなInputに対して
WITH Step1 AS ( SELECT CollectTop(1) OVER(ORDER BY value) AS Tops FROM Input TIMESTAMP BY Time GROUP BY TumblingWindow(second, 1), id ) SELECT flat.ArrayValue.Value.id, flat.ArrayValue.Value.value, flat.ArrayValue.Value.time FROM Step1 s1 CROSS APPLY GetElements(s1.Tops) AS flat WHERE flat.ArrayIndex = 0
こんなクエリで、id:1とid:12の値が一軒ずつとれるようになります。