
お世話になります。
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を探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLサーバで和暦から西暦に変換...
-
SQL*LOADER 最終列のLENが1
-
oracle 文字列 01:45 を時間に...
-
Exel関数で誕生日がきたら...
-
yyyy/M/dをyyyy/MM/ddに変換
-
エクセル 日付による並べ替え...
-
SQLで部分的にGROUP BYしたいとき
-
エクセルの日付に時差を加算 #V...
-
今日の日付が入った行のデータ...
-
SQL/Loaderでの年月日時分秒の...
-
Excelグラフの日付軸の日付がず...
-
SQL ブレーク処理について
-
WHERE句にて「30日前から今日ま...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
エクセルVBA 今日の日付行...
-
特定の日付が第何週目にあるか...
-
Accessの数値から時間に変換す...
-
一秒ごとに更新をかける方法
-
重複するIDのデータを1行にま...
-
excel 日付のみ置換したいのです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
今日の日付が入った行のデータ...
-
SQLで部分的にGROUP BYしたいとき
-
重複するIDのデータを1行にま...
-
Accessの数値から時間に変換す...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
SQLサーバで和暦から西暦に変換...
-
テーブルの主キーをdate型...
-
エクセル 日付による並べ替え...
-
日付書式に変換でこまっています!
-
日数算出SQL
-
日付の切り出し方法について
-
指定した年月までのデータを取...
-
wordの差し込み印刷での日付表示
-
OSのシステム日付を変更して...
-
Excelグラフの日付軸の日付がず...
-
日付の最大値レコードを取得す...
-
特定の日付が第何週目にあるか...
-
OSのシステム日付を変更して...
-
excel 日付のみ置換したいのです
-
WHERE句にて「30日前から今日ま...
おすすめ情報