emp_id、firstname、lastname、region_id、status、effective_date などの列を持つ従業員テーブルがあります。
従業員テーブルには、同じ従業員に対して有効日とステータスが異なる複数のエントリを含めることができます。
従業員には、「退職者」と「入社者」の 2 つのステータスがあります。
id emp_id firstname region status effective_date
1 1 James Asia Joiner 1-Jan-2012
2 1 James UK Leaver 1-Aug-2012
3 1 James USA Joiner 1-Aug-2012
4 1 James Asia Leaver 1-May-2012
5 1 James UK Joiner 1-May-2012
6 1 James USA Leaver 1-Sep-2012
上記の従業員テーブルのデータを使用して、2012 年 1 月 1 日のジェームズの最新のレコードを取得する場合、id = 1 のレコードを取得します。
2012 年 5 月 1 日のジェームズの最新レコードを取得したい場合、id = 5 のレコードを取得します。
2012 年 8 月 1 日のジェームズの最新レコードを取得したい場合、id = 3 のレコードを取得します。
2012 年 9 月 1 日のジェームズの最新レコードを取得したい場合、id = 6 のレコードを取得します。
クエリを正しく実行すると、最新のレコードが得られます
SELECT
emp_id,
MAX(effective_date) AS latest_effective_date
FROM
EMPLOYEE
GROUP BY
emp_id
しかし、 firstname 、 region などの他の列を取得するにはどうすればよいですか?
それらをselect句またはgroup by句に入れると、最新のレコードだけでなく、他のレコードも取得します。