本ページでは、Realtime Compute を使用して最新のトランザクションレコードを取得する方法について説明します。
概要
E コマースの業者の注文トランザクションテーブルには、さまざまな時点の同じ注文に関する操作レコードが含まれる場合があります。 たとえば、注文トランザクションテーブルには、注文するプロダクトの数量の変更やプロダクトの返品など、ユーザーの操作が記録されます。 業者が必要とするのは、有効なトランザクションレコードの取得のみです。 次のセクションでは、Realtime Compute を使用して最新のトランザクションレコードを取得する方法について説明します。
手順
- 構文
SELECT col1, col2, col3 FROM ( SELECT col1, col2, col3 ROW_NUMBER() OVER ([PARTITION BY col1[, col2..]] ORDER BY col1 [asc|desc][, col2 [asc|desc]...]) AS rownum FROM table_name) WHERE rownum <= N [AND conditions]
パラメーター 説明 ROW_NUMBER()
行の数を計算するために使用される OVER ウィンドウ関数。 この値は 1 から始まります。 PARTITION BY col1[, col2..]
テーブルを分割する列。 このパラメーターは省略可能です。 ORDER BY col1 [asc|desc][, col2 [asc|desc]...]
データのソートに使用する列。 複数の列に異なる順序を指定できます。 - 例
- テストデータ
id (BIGINT) TIME (VARCHAR) VALUE (BIGINT) 1 1517898096 5 1 1517887296 44 1 1517872896 32 2 1517872896 10 - テスト文
create table source_table ( id BIGINT, `TIME` VARCHAR, `VALUE` BIGINT )with( type='datahub', endPoint='yourEndpointURL', project='yourProjectName', topic='yourTableName', accessId='yourAccessId', accessKey='yourAccessSecret' ); CREATE TABLE result_table ( id BIGINT, `TIME` VARCHAR, `VALUE` BIGINT ) WITH ( type= 'rds', url = 'yourRDSDatabaseURL', userName = 'yourDatabaseName', password = 'yourDatabasePassword', tableName = 'yourTableName' ); INSERT INTO result_table SELECT id,`TIME`,`VALUE` FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY `TIME` desc) AS rownume FROM source_table ) WHERE rownume <= 1 ;
- テスト結果
id (BIGINT) TIME (VARCHAR) VALUE (BIGINT) 1 1517898096 5 2 1517872896 10
- テストデータ
- キー ポイント
SELECT id,`TIME`,`VALUE` FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY `TIME` desc) AS rownume FROM source_table ) WHERE rownume <= 1
注文テーブルの一部の注文には、異なる時間に生成されたレコードが複数あります。 各注文について最後に生成されたレコードのみを取得するには、
row_number() OVER (PARTITION BY id ORDER BY TIME DESC)
を使用して、レコードを注文 ID でグループ化し、各グループのレコードを時間の降順でソートします。 計算結果には、各グループでソートされたレコードの連続番号 (グループ内で連続しており、一意です) がリストされます。 各グループの最初のレコードは、対応する注文の最後に生成されたレコードです。