質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Presto

Prestoは、Facebook社がオープンソースで公開した分散処理基盤。Hive/Impalaと同じ分散SQLエンジンの一つです。それぞれのタスクが同時進行できる計算モデルを使用。中間データをメモリに持つため、タスク間のデータのやりとりが高速であることが特徴です。

Amazon Athena

Amazon Athenaは、標準SQLを使用してAmazon S3内のデータを直接分析することができるインタラクティブなクエリサービスです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

906閲覧

過去1か月の購入金額の合計を追加したい

yukadayo21

総合スコア1

Presto

Prestoは、Facebook社がオープンソースで公開した分散処理基盤。Hive/Impalaと同じ分散SQLエンジンの一つです。それぞれのタスクが同時進行できる計算モデルを使用。中間データをメモリに持つため、タスク間のデータのやりとりが高速であることが特徴です。

Amazon Athena

Amazon Athenaは、標準SQLを使用してAmazon S3内のデータを直接分析することができるインタラクティブなクエリサービスです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/11/25 08:49

編集2021/11/25 08:51

前提・実現したいこと

UIDday購入金額
0012020/01/01100
0012020/01/02200
0012020/03/02200
0022020/01/02200
0022020/01/02200
0032020/01/02200

のデータから右に各UIDの過去1か月の購入金額を追加したいです。
over句などを駆使しましたが、ほしい結果が実現できませんでした。

ほしい結果のイメージ

UIDday購入金額過去1か月の購入金額
0012020/01/01100100
0012020/01/02200300
0012020/03/02200200
0022020/01/02100100
0022020/01/02200300
0032020/01/02200200

補足情報(FW/ツールのバージョンなど)

amazon athenaを使用しています。
ドキュメントは基本prestoを参考にしてます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PostgreSQLですが Z.DAY - interval '1 month' の部分をAmazon Athena用の方言に変えればいけるのではないでしょうか。

SQL

1SELECT 2 UID 3, DAY 4, 購入金額 5, (SELECT SUM(購入金額) FROM TBL AS A 6 WHERE A.DAY BETWEEN Z.DAY - interval '1 month' AND Z.DAY 7 AND A.UID = Z.UID) AS 過去1か月の購入金額 8FROM TBL AS Z

追記 2021/11/27
当方Amazon Athenaを使用出来る環境にないのですが
マニュアルを見るところwindow関数が使えるようなので
window関数を使ったSQLは以下のようになると思われます。
ただし、RANGEフレームは使用出来ない可能性が高いと思います。

sql

1SELECT 2 UID 3, DAY 4, 購入金額 5, SUM(購入金額) OVER ( 6 PARTITION BY UID 7 ORDER BY DAY 8 RANGE BETWEEN '1 month' PRECEDING AND CURRENT ROW 9 ) AS 過去1か月の購入金額 10FROM TBL

参考
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/presto-functions.html
https://masahikosawada.github.io/2018/07/07/Window-Frame/#rangeモード

投稿2021/11/25 13:31

編集2021/11/27 08:28
takanaweb5

総合スコア358

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukadayo21

2021/11/29 05:50

rangeはエラーが出てしまったので、先に回答いただいていたものを (SELECT SUM(購入金額) FROM TBL AS A WHERE A.DAY BETWEEN Z.DAY - interval '1' month AND Z.DAY AND A.UID = Z.UID) AS 過去1か月の購入金額 とすることで算出できました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問