指定した値をすべて含むレコードを検索
bが1~5を含むレコードのaを取得
SELECT a FROM t1 WHERE b IN (1,2,3,4,5) GROUP BY a HAVING CONST(DISTINCT b) = 5
最大の値を持つレコードをキーごとに抽出
group by でキーを指定するのがポイント
SELECT a.* FROM 社員マスタ a INNER JOIN ( SELECT 部署コード, MAX(入社年月日) MAX_入社年月日 FROM 社員マスタ GROUP BY 部署コード ) b ON a.部署コード = b.部署コード AND a.入社年月日 = b.MAX_入社年月日
【例】"部署コードごと"に入社年月日が最大のレコードを抽出
(抽出前)
社員コード | 氏名 | 生年月日 | 住所 | 電話番号 | 部署コード | 入社年月日 |
---|---|---|---|---|---|---|
0001 | 高橋 一生 | 1988/11/09 | 大阪府大阪市北区池田町1-1 | 080-1111-1111 | 001 | 2001/04/01 |
0002 | 高橋 二生 | 1989/12/02 | 大阪府大阪市北区池田町1-1 | 080-1111-2222 | 001 | 2002/04/01 |
0003 | 検証 太郎 | 1999/01/01 | 大阪府大阪市 | 090-1111-2222 | 002 | 2010/01/01 |
0004 | 検証 次郎 | 1999/01/01 | 大阪府大阪市 | 090-1111-2222 | 002 | 2011/01/01 |
(抽出後)
社員コード | 氏名 | 生年月日 | 住所 | 電話番号 | 部署コード | 入社年月日 |
---|---|---|---|---|---|---|
0002 | 高橋 二生 | 1989/12/02 | 大阪府大阪市北区池田町1-1 | 080-1111-2222 | 001 | 2002/04/01 |
0004 | 検証 次郎 | 1999/01/01 | 大阪府大阪市 | 090-1111-2222 | 002 | 2011/01/01 |
最大の値を持つレコードを抽出
WHEREのサブクエリを使用するのがポイント
SELECT * FROM 社員マスタ WHERE 入社年月日 = ( SELECT MAX(入社年月日) FROM 社員マスタ )
【例】入社年月日が最大のレコードを抽出
(抽出前)
社員コード | 氏名 | 生年月日 | 住所 | 電話番号 | 部署コード | 入社年月日 |
---|---|---|---|---|---|---|
0003 | 検証 太郎 | 1999/01/01 | 大阪府大阪市 | 090-1111-2222 | 002 | 2010/01/01 |
0004 | 検証 次郎 | 1999/01/01 | 大阪府大阪市 | 090-1111-2222 | 002 | 2011/01/01 |
(抽出後)
社員コード | 氏名 | 生年月日 | 住所 | 電話番号 | 部署コード | 入社年月日 |
---|---|---|---|---|---|---|
0004 | 検証 次郎 | 1999/01/01 | 大阪府大阪市 | 090-1111-2222 | 002 | 2011/01/01 |