
いつもお世話になっています。
1日に複数件のレコードがある場合があり、その場合には任意カラムが最大の行を抽出したいです。
カラムの構成は頭から、
日付 SMALLINT,
銘柄 CHAR(4),
市場 TINYINT,
始 MEDIUMINT,
高 MEDIUMINT,
安 MEDIUMINT,
終 MEDIUMINT,
出来高 INT UNSIGNED,
PRIMARY KEY(日付, 銘柄, 市場)
となっており、
例えば、次の4行のレコードが格納されている場合に、
5567 '4298' 11 21650 21680 21630 21650 438500
5568 '4298' 11 21650 21660 21480 21650 531300
5568 '4298' 30 0 0 0 0 0
5569 '4298' 11 21650 21650 21320 21460 124200
日付5568が重複しているので、出来高が大きい方の行のみ選択し、
5567 '4298' 11 21650 21680 21630 21650 438500
5568 '4298' 11 21650 21660 21480 21650 531300
5569 '4298' 11 21650 21650 21320 21460 124200
の3行を得るSQLをご教示ください。
データが見にくくスミマセン。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
SELECT *
FROM テーブル名
OVER(
PARTITION BY 日付
ORDER BY 出来高 DESC
LIMIT 1
)
かなあ...
ウィンドウ関数について少し調べました。
しかし私の環境ではなぜか使えませんでした。
使い方が良く分かっていないだけかもしれません。
何か良い方法がないか、私も同時進行で考えていたのですが、副問合せを使ってなんとか出来ました。
SELECT * FROM 株価, (
SELECT 日付, MAX(出来高) AS mx
FROM 株価
WHERE 銘柄 = ?
GROUP BY 日付
) AS mx
WHERE 株価.日付 = mx.日付 AND 銘柄 = ? AND 出来高 = mx
このクエリーだと、同一日に出来高の同じ行が複数あった場合には、それらが全て選択されてしまうので少しダサいですが、少なくとも例のようなヘンテコなレコードを除外する役は果たせますし、速度もまずまずでしたので、当面の運用には耐えうると思いました。
No.1
- 回答日時:
MySQL であってますか?
MySQL8.0以上 (あるいは他のDBMS)なら、ウィンドウ関数の ROW_NUMBERで「同一日付 内での順位」を表わす列を追加する
→ 「順位」=1 を抽出する
というのが定番の一つ。
「グループ内で最大の行 SQL」で検索すれば他の方法等も見つかる。
MySQL8.0以上ですが、なぜかROW_NUMBERが使えませんでした。
使い方が良く分かっていないだけかもしれません。
何か良い方法がないか、私も同時進行で考えていたのですが、サブクエリーを使ってなんとか出来ました。
SELECT * FROM 株価, (
SELECT 日付, MAX(出来高) AS mx
FROM 株価
WHERE 銘柄 = ?
GROUP BY 日付
) AS mx
WHERE 株価.日付 = mx.日付 AND 銘柄 = ? AND 出来高 = mx
このクエリーだと出来高が同じだった場合には、複数件のレコードが選択されてしまうので少しダサいですが、少なくとも例のようなヘンテコなレコードを除外する役は果たせますし、速度もまずまずでしたので、当面の運用には耐えうると思いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- IT・エンジニアリング ドメイン駆動設計の値オブジェクトについて質問 1 2023/05/13 02:50
- Oracle Oracleですがsqlで質問です。 サブクエリ内で番号というカラムで昇順の1レコード目を取得したい 3 2023/05/22 10:02
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(Microsoft Office) EXCELでの文字列連続抽出について 1 2023/11/24 01:39
- Visual Basic(VBA) Excel VBA マクロ あるフォルダー内の複数のファイルを統合したいです 1 2024/02/19 21:37
- Visual Basic(VBA) Excel VBA 文字列のセルを反映させたいです 2 2024/02/24 00:06
- Visual Basic(VBA) wordのマクロで思うように行きません(ファイル削除ができない) 3 2023/09/12 08:34
- 株式市場・株価 上場廃止が決まった銘柄が、なぜ上昇する? ストップ高になる? 7 2024/03/29 14:44
- その他(資産運用・投資) 積立nisaについて 2 2023/06/12 23:54
- 英語 複数のあなた達に呼びかけている命令文の表現方法等について 2 2024/02/18 09:34
このQ&Aを見た人はこんなQ&Aも見ています
-
半角カタカナについて
その他(コンピューター・テクノロジー)
-
数学、プログラミング、物理、化学など理系の方に質問 プログラミング言語、数式、化学式などで会話をしよ
その他(プログラミング・Web制作)
-
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
-
4
アルゴリズムとコードとは何ですか 現代はネットでコードを探してドラクエ3が作れるとか?
その他(プログラミング・Web制作)
-
5
最近思ったんですが、PCってこれ以上何を進化するんですかね?性能はもうどこも技術的に頭打ちだし、あと
その他(コンピューター・テクノロジー)
-
6
スマートフォンの進化はもうここまでですよね? スマートフォン以外の何かとてつもなく未来的な通信手段ま
その他(コンピューター・テクノロジー)
-
7
ネクスコ中日本は7日午後2時HPで「4月7日午後2時より17路線・106カ所全ての料金所で応急復旧作
その他(開発・運用・管理)
-
8
【マクロ】宣言は、何のためにするんですか???しなくても、普通に動いしまうのはなぜ?
Excel(エクセル)
-
9
パイソンのソースコードをChatGPTで書いてもらうのを独学でやろうと思うとどういう方法がオススメで
その他(プログラミング・Web制作)
-
10
OKwebはアプリはないのですか?
アプリ
-
11
ライブラリフォルダの場所
Windows 10
-
12
どのようにして開発したロボットを生産し販売するのでしょうか、ラズベリーパイで試作機を作ったロボットを
ソフトウェア
-
13
何でSNSは、危険と言われたりするのですか
その他(セキュリティ)
-
14
(マクロ)値を返す時は subでもfunctionでもどちらでも良いのでしょうか?
Excel(エクセル)
-
15
C言語やC++はRustに取って代わられるのでしょうか?
その他(コンピューター・テクノロジー)
-
16
AIのプログラムについて教えてください
その他(プログラミング・Web制作)
-
17
コマンドプロンプトやPowerShellでは合計4TBのデータのハッシュ値を一度に取得するなどの大量
その他(コンピューター・テクノロジー)
-
18
アセンブリ言語について。
その他(プログラミング・Web制作)
-
19
LinuxはオープンソースなのでLinuxにもしウイルスをLinuxを作っている組織であるLinux
その他(コンピューター・テクノロジー)
-
20
IEを使わずHTMLを取得する
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルの列数を調べたい
-
group byで最後のレコードを抽...
-
mysqlの結果の速度はデータの違...
-
sqlについて質問です。
-
MySQLデータでデータチェック
-
select * での表示が崩れる?
-
MySQL 改行コードを含む文字列...
-
[MySQL]LOAD DATA INFILE一部レ...
-
MYSQLで小数点を表示する場合と...
-
他のシートの検索
-
DBの定義のサイズを大きくし過...
-
INDIRECT関数の代替方法は?
-
SELECT文で、指定カラム以外の...
-
UNIONする際、片方テーブルしか...
-
複数のインデックスについて
-
一部のカラムでdistinctし全て...
-
SQLServerでNULLを挿入したいです
-
BULK INSERT時のNull許容について
-
GREATESTで NULLをスルーする方...
-
スペースによる絞り込み検索をS...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルの列数を調べたい
-
同一日に複数レコードがある場...
-
group byで最後のレコードを抽...
-
[MySQL]LOAD DATA INFILE一部レ...
-
MySQL 改行コードを含む文字列...
-
MYSQLで小数点を表示する場合と...
-
select * での表示が崩れる?
-
MySQL AUTO_INCREMENTが最大に...
-
WHEREなどの条件が多い場合、ど...
-
フレンドリストのようなものを...
-
betweenを使うyyyy/mm/ddでの範...
-
[MYSQL]日付のカラムにデーター...
-
時間範囲が重複したレコードを...
-
VB.NETでSQL-SERVERにクエリを...
-
MySQLについて
-
MySQLでカラム内の値の先頭の数...
-
mysqlで年と月を別々のカラムに...
-
whereの使い方が分からないので...
-
データベースについて
-
MySQL テーブルの一部のカラム...
おすすめ情報