私は次のデータを持っています。
--------------------------------------------------------------------------------
id | value_name | last_modified | system_id | value_data |
--------------------------------------------------------------------------------
1 | name1 | 2012-06-04 | 1 | aaa |
2 | name1 | 2012-02-04 | 1 | bbb |
3 | name1 | 2012-04-25 | 1 | ccc |
4 | name2 | 2012-07-04 | 1 | ddd |
5 | name2 | 2012-06-14 | 1 | eee |
6 | name3 | 2011-09-05 | 1 | qqq |
--------------------------------------------------------------------------------
ここで、最近変更された値のみを取得する必要があります。
アップデート
上の表について、次の結果を取得したい
--------------------------------------------------------------------------------
id | value_name | last_modified | system_id | value_data |
--------------------------------------------------------------------------------
1 | name1 | 2012-06-04 | 1 | aaa |
4 | name2 | 2012-07-04 | 1 | ddd |
6 | name3 | 2011-09-05 | 1 | qqq |
--------------------------------------------------------------------------------
こことグーグルでもよく検索しましたが、見つけた解決策は実際には機能しません。たとえば、提案されたソリューションの 1 つは、usign join です。
SELECT
v.[id],
v.[system_id],
v.[value_name],
v.[value_data]
FROM
[values] v INNER JOIN
(
SELECT
v.[id],
MAX(v.[last_modified]) AS last_modified
FROM
[values] v
WHERE
v.[system_id] = 1
GROUP BY
v.[id]
) s
ON
v.[id] = s.[id]
ただし、サブクエリはid
(一意である)によってグループ化されるため、最大最終更新日は計算されません。私はSQLiteを使用しており、そのような単純なクエリは私にとってはうまくいきます
SELECT
v.[id],
v.[system_id],
v.[value_name],
v.[value_data],
MAX(v.[last_modified]) AS last_modified
FROM
[values] v
WHERE
v.[system_id] = 1
GROUP BY
v.[value_name]
しかし、集計関数または group by ステートメントのいずれにもリストされていないフィールドを選択できないことを Oracle から覚えているので、期待どおりの結果が得られるとは限りません。それを解決する方法はありますか?
前もって感謝します。