0

検索文字列を書くのが複雑だと感じているので、質問する前にあまり検索していません。

説明ではなく例で質問します。

user_sale というテーブルがあります

id emp_id emp_name emp_location date sales
------------------------------------------------------
1  111    mr.one   A            2013/07/17   5000
2  111    mr.one   C            2013/07/14   6000
3  222    mr.two   B            2013/06/15   5500

等々。

出力では、すべてのフィールドをそのままにしたいのですが、1 か月以内に最新の emp_location が必要です。日付から月と年を取得できます。だから私は年と月ごとにグループ化することができます.

期待される出力:

id emp_id emp_name emp_location date sales
------------------------------------------------------
1  111    mr.one   A            2013/07/17   5000
2  111    mr.one   A            2013/07/14   6000
3  222    mr.two   B            2013/06/15   5500

1 つの解決策は、同じテーブルと結合することですが、テーブルには大きなデータが含まれているため、適切な解決策とは思えません。

4

2 に答える 2

0

ウィンドウ関数first_value()を使用してemp_location、別の列 ( ) によって定義された列 ( ) の「最初」を取得しdate、それ以外の場合は変更されていない行に埋め込まれます。

SELECT id, emp_id, emp_name
     , first_value(emp_location) OVER (PARTITION BY emp_id
                                       ORDER BY date DESC) AS emp_location
     , date, sales
FROM   user_sale
ORDER  BY id;

emp_id定義したグループごとに一意であると仮定します。

余談ですが、 ( SQL 標準の予約語) またはdate(説明的でない) を列名として使用しないでください。id

于 2013-07-17T03:54:05.773 に答える