2

2つの異なるテーブルがあり、最初のテーブルには他のリクエストに付与された権限が含まれています。次の列があります。

承認テーブル

| authorization_date | role_id | request_id |
|--------------------|---------|------------|
| 2011-08-02         |    1    | 168        |
| 2011-08-10         |    2    | 168        |
| 2011-08-20         |    6    | 168        |
| 2011-08-03         |    2    | 169        |
| 2011-08-24         |    6    | 169        |
| 2011-08-05         |    3    | 170        |
| 2011-08-09         |    5    | 170        |

ご覧のとおり、人によって役割が異なり、一定レベルの承認を与えることもできます。役割が高いほど、要求はより高く処理されています。ここで、私がやりたいのは、role_id(別のテーブルにあります)に関連付けられた説明と、最後の承認のみを表示したいということです。私はそれの日付を持っているので、どれが最新のものであるかをすでに知っています。ただし、日付の最大値を取得してクエリをグループ化しようとしているため、これを行う方法がわかりません。role_idの説明のみを含む2番目のテーブルにリンクすると、重複が発生します。これを行う方法を考えてみてください。私はクエリに慣れていないので、自分で学んでいるので、多くのことを知りません。何か案は?

ありがとう!

4

2 に答える 2

2

私はここで少し推測していますが、あなたが望むと思います:

SELECT Authorizations.*, anotherTable.description
FROM 
(
    SELECT MAX(authorization_date) AS max_date, request_id
    FROM Authorizations
    GROUP BY request_id
) last_auths
INNER JOIN Authorizations ON last_auths.max_date = Authorizations.authorization_date
    AND last_auths.request_id = Authorizations.request_id
INNER JOIN anotherTable ON anotherTable.role_id = Authorizations.role_id

派生テーブルは、各リクエストの最大承認日を取得します。次に、参加してそのリクエストのrole_idを取得し、再度参加して説明を取得できます。

于 2012-08-10T05:11:02.433 に答える
0
SELECT d.role_desc, a.role_id, MAX(a.authorization_date)
FROM Authorizations a
INNER JOIN Description d ON a.role_id = d.role_id
GROUP BY a.role_id, d.role_desc, d.role_id

このクエリを試して、期待どおりの結果が得られていることを確認してください。

于 2012-08-10T05:13:58.593 に答える