
いつもお世話になっています。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
数学、プログラミング、物理、化学など理系の方に質問 プログラミング言語、数式、化学式などで会話をしよ
その他(プログラミング・Web制作)
-
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
アルゴリズムとコードとは何ですか 現代はネットでコードを探してドラクエ3が作れるとか?
その他(プログラミング・Web制作)
-
-
4
半角ハイフンに似た文字
その他(データベース)
-
5
半角カタカナについて
その他(コンピューター・テクノロジー)
-
6
ネクスコ中日本は7日午後2時HPで「4月7日午後2時より17路線・106カ所全ての料金所で応急復旧作
その他(開発・運用・管理)
-
7
IT用語の「アクセスポイント」とは何か?その2 文字列で表示できないの?
ネットワーク
-
8
ライブラリフォルダの場所
Windows 10
-
9
何でSNSは、危険と言われたりするのですか
その他(セキュリティ)
-
10
QRコードの作成方法について
オープンソース
-
11
SJISで、全角文字Aの文字コードは16進数でいくつですかまた、BBB、tXtの改行コードには、保存
Microsoft ASP
-
12
まさかウィンドウずの ctrl+ のキー操作を全暗記と言うか、 把握してる人なんていますかね?
Windows 10
-
13
1.84億件のパスワード流出 の件
その他(セキュリティ)
-
14
アセンブリ言語について。
その他(プログラミング・Web制作)
-
15
非常に驚くことに映画館の解像度は4KかHDが主流らしいです。映画館ほどの大きな画面でも4KかHDが主
その他(コンピューター・テクノロジー)
-
16
Pythonをbashやコマンドプロンプトの代わりに使うとコードの量はどちらの方が何倍くらい多くなる
その他(コンピューター・テクノロジー)
-
17
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
18
コマンドプロンプトやPowerShellでは合計4TBのデータのハッシュ値を一度に取得するなどの大量
その他(コンピューター・テクノロジー)
-
19
「PythonはC言語並の速さに出来る」と言っている人がネットに沢山いる一方で「Pythonは遅いか
その他(コンピューター・テクノロジー)
-
20
LinuxはオープンソースなのでLinuxにもしウイルスをLinuxを作っている組織であるLinux
その他(コンピューター・テクノロジー)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
group byで最後のレコードを抽...
-
テーブルの列数を調べたい
-
MySQL 改行コードを含む文字列...
-
betweenを使うyyyy/mm/ddでの範...
-
[MYSQL]日付のカラムにデーター...
-
INDIRECT関数の代替方法は?
-
SELECT文で、指定カラム以外の...
-
一部のカラムでdistinctし全て...
-
他のシートの検索
-
Accessの「IIF」に相当するSQL...
-
now()かCURRENT_TIMESTAMPか
-
UNIONする際、片方テーブルしか...
-
DBの定義のサイズを大きくし過...
-
sql , insert で空行(全ての列...
-
カラムとコラムの使い分け
-
【Transact-sql】 where条件、i...
-
mysqlで50音順にorder byしたい。
-
type date にnullをinsert
-
ホームページを作ろうと思いま...
-
BULK INSERT時のNull許容について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルの列数を調べたい
-
[MySQL]LOAD DATA INFILE一部レ...
-
group byで最後のレコードを抽...
-
MYSQLで小数点を表示する場合と...
-
WHEREなどの条件が多い場合、ど...
-
MySQL 改行コードを含む文字列...
-
データを同データが並ばないよ...
-
同一日に複数レコードがある場...
-
sqlについて質問です。
-
MySQL AUTO_INCREMENTが最大に...
-
mysqlの結果の速度はデータの違...
-
betweenを使うyyyy/mm/ddでの範...
-
データ型による検索速度の違い...
-
カラムの値を、条件により動的...
-
フレンドリストのようなものを...
-
年月日のうち月日だけ取得したい。
-
MYSQLのストアドでの動的SQLに...
-
mysqlで検索結果にupdateをしたい
-
MySQLデータでデータチェック
-
データの暗号化について
おすすめ情報