私はスパークSQLを使用して、私はconsecutivesの最も長いシーケンスは、私が適応しようとしたどのように連続した日付の最長シーケンスを見つけるのですか?
ID, longest_seq (days)
1, 2
2, 5
3, 1
のように、各IDの日付持っている必要があり、この
ID, time
1, 1493596800
1, 1493596900
1, 1493432800
2, 1493596800
2, 1493596850
2, 1493432800
のようなタイムスタンプの時間の訪問でデータベースを持っていますこの回答Detect consecutive dates ranges using SQL私の場合には、私は私が期待していることを管理していませんでした。
SELECT ID, MIN (d), MAX(d)
FROM (
SELECT ID, cast(from_utc_timestamp(cast(time as timestamp), 'CEST') as date) AS d,
ROW_NUMBER() OVER(
PARTITION BY ID ORDER BY cast(from_utc_timestamp(cast(time as timestamp), 'CEST')
as date)) rn
FROM purchase
where ID is not null
GROUP BY ID, cast(from_utc_timestamp(cast(time as timestamp), 'CEST') as date)
)
GROUP BY ID, rn
ORDER BY ID
誰かがこの要求を解決する方法についていくつかの手掛かりを持っている、またはそれで間違っているものをした場合、私は おかげ
助けをいただければ幸いですが、[EDIT]より明示的な入力/出力
ID, time
1, 1
1, 2
1, 3
2, 1
2, 3
2, 4
2, 5
2, 10
2, 11
3, 1
3, 4
3, 9
3, 11
結果は次のようになります。
ID, MaxSeq (in days)
1,3
2,3
3,1
すべての訪問でありますタイムスタンプが必要ですが、連続した日が必要ですが、1日に1回の訪問は1日1回カウントされます。
もっと具体的な入力ができますか?私は、入力データセットが結果と一致するとは思わない。 –