
お世話になります。
SQLで日付の最大値を取得する方法です。
テーブルのデータ内容は以下のようになっています。
| 社員番号 | 社員名 | 日付 | 順序 |
+---------+-------+-----------+-----+
| 100 | AAA | 2011/05/01 | 2 | ← このレコードを取得したい
+---------+-------+-----------+-----+
| 100 | AAA | 2011/05/01 | 1 |
+---------+-------+-----------+-----+
| 100 | AAA | 2011/04/01 | 1 |
+---------+-------+-----------+-----+
| 200 | BBB | 2011/04/01 | 2 | ← このレコードを取得したい
+---------+-------+-----------+-----+
| 200 | BBB | 2011/04/01 | 1 |
+---------+-------+-----------+-----+
取得したいレコードは、
社員ごとの最大日付の最大順序をもつレコードです。
(上記の1行目と4行目のレコードを取得したい)
この場合、
下記のようなSQLを考えます。
---------------------------------
SELECT
社員番号, 社員名, 日付
FROM
テーブル名
WHERE
社員番号 = 'xxx'
AND 日付 = (SELECT
MAX(日付)
FROM
テーブル名
)
AND 順序 = (SELECT
MAX(順序)
FROM
テーブル名
)
----------------------------------
但し、上記の場合、
社員ごとに最大値レコードが取得できません。
どなたかレコード取得方法について
教えていただけないでしょうか?
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
WINDOW関数が使えるなら
SELECT 社員番号, 社員名, 日付, 順序
FROM
( SELECT *, ROW_NUMBER() OVER( PARTITION BY 社員番号 ORDER BY 順序 DESC ) RN
FROM テーブル )
WHERE RN = 1 ORDER BY 社員番号;
No.5
- 回答日時:
ANo.4のbaunceです。
すみません。他の方が回答されている事に気づきませんでした。
nora1962さんの回答と同じでした。
nora1962さんごめんなさい
大変失礼しました。
No.4
- 回答日時:
こんばんは。
私も先ほどこちらに質問させていただいたのですが、
私にも回答できそうな質問があったので協力させていただきます。
◇まずは検証データ作成。
create table EX001
(
C1 number,
c2 varchar2(8),
c3 date,
c4 number
);
insert all
into ex001(c1,c2,c3,c4) values(100,'AAA',to_date('2011/0501'),2)
into ex001(c1,c2,c3,c4) values(100,'AAA',to_date('2011/0501'),1)
into ex001(c1,c2,c3,c4) values(100,'AAA',to_date('2011/0401'),1)
into ex001(c1,c2,c3,c4) values(200,'BBB',to_date('2011/0401'),2)
into ex001(c1,c2,c3,c4) values(200,'BBB',to_date('2011/0401'),1)
select 'X' from dual;
commit;
◇回答SQL
select * from
(
select c1,c2,c3,c4,row_number() over (partition by c1 order by c3 desc,c4 desc) jyun
from ex001 order by c2,jyun
) t where t.jyun = 1;
C1 C2 C3 C4 JYUN
---------- -------- -------- ---------- ----------
100 AAA 11-05-01 2 1
200 BBB 11-04-01 2 1
これでどうでしょうか?
とりあえず意図する行は返ると思いますが、
一社員の中で1位が2レコードあった場合などは
考慮できてないです。
No.2
- 回答日時:
「同じ社員番号で、後の日付のデータが無く、同じ日付でより大きい順序のデータも無いもの」という条件を相関サブクエリを使って表現すればよいかと。
例) ---------------------------------------------
SELECT * FROM テーブル名 e1
WHERE
NOT EXISTS(
SELECT * FROM テーブル名 e2
WHERE e1.社員番号 = e2.社員番号
AND (e1.日付 < e2.日付 OR e1.日付 = e2.日付 AND e1.順序 < e2.順序)
);
---------------------------------------------
ちなみに社員番号でグループ化して、日付と順序のMAXを取得した場合は、日付と順序おのおのの最大値が返されるため、期待されるものと違う結果になるかも知れません。
--------------------------
| 100 | AAA | 2011/05/01 | 2 |
--------------------------
| 100 | AAA | 2011/05/01 | 1 |
--------------------------
| 100 | AAA | 2011/04/01 | 3 |
--------------------------
| 100 | AAA | 2011/04/01 | 2 |
--------------------------
| 100 | AAA | 2011/04/01 | 1 |
--------------------------
このような状態だった場合、グループ化する方法だと下記の様な結果になります。
--------------------------
| 100 | AAA | 2011/05/01 | 3 |
--------------------------
参考URL:http://codezine.jp/article/detail/907

No.1
- 回答日時:
こういうことでしょうか?
SELECT
社員番号
, 社員名
, MAX(日付)
, MAX(順序)
FROM
テーブル名
GROUP BY
社員番号
, 社員名
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Oracle Oracleですがsqlで質問です。 サブクエリ内で番号というカラムで昇順の1レコード目を取得したい 3 2023/05/22 10:02
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
今日の日付が入った行のデータ...
-
SQLで部分的にGROUP BYしたいとき
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
エクセル 日付による並べ替え...
-
OSのシステム日付を変更して...
-
エクセルのヘッダーを変数で指...
-
wordの差し込み印刷での日付表示
-
SQLサーバで和暦から西暦に変換...
-
SQLがうまくいかない!
-
関数IFで、指定日付範囲のデー...
-
SQL*Loaderについて
-
SQLServerのストアドで1ヶ月前...
-
テーブルの主キーをdate型...
-
指定した年月までのデータを取...
-
ACCESSでDate関数のエラーのついて
-
Excelの並び替え(先頭の文字以...
-
Accessの数値から時間に変換す...
-
日付表示について
-
Accessのマクロでモジュールを...
-
エクセルVBAでUserFormを起動し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
今日の日付が入った行のデータ...
-
SQLで部分的にGROUP BYしたいとき
-
Accessの数値から時間に変換す...
-
重複するIDのデータを1行にま...
-
SQLサーバで和暦から西暦に変換...
-
日付書式に変換でこまっています!
-
テーブルの主キーをdate型...
-
日数算出SQL
-
wordの差し込み印刷での日付表示
-
oracle 文字列 01:45 を時間に...
-
日付の切り出し方法について
-
Excelグラフの日付軸の日付がず...
-
WHERE句にて「30日前から今日ま...
-
SQL/Loaderでの年月日時分秒の...
-
エクセル 日付による並べ替え...
-
excel 日付のみ置換したいのです
-
DB2のSQL(日付)について
-
指定した年月までのデータを取...
-
日付の最大値レコードを取得す...
おすすめ情報