下記(A)の状態から(B)のような結果を出したくて、group by やサブクエリなどで試行錯誤しましたが、
欲しい結果が取れず困っております。
どなたかわかる方、ご教授いただけましたら助かります。よろしくお願いいたします。
(MYSQLバージョン:4.1.21)
(A)
NO|入荷日付|種別|名称
3|20080730|2|りんご
4|20080801|2|りんご
5|20080728|2|りんご
8|20080801|2|りんご
10|20080812|2|りんご
7|20080811|25|ぶどう
9|20080811|25|ぶどう
1|20080731|36|みかん
2|20080728|36|みかん
6|20080808|50|いちご
(B)抽出結果
NO|入荷日付|種別|名称
10|20080812|2|りんご
9|20080811|25|ぶどう
1|20080731|36|みかん
6|20080808|50|いちご
■抽出条件
・【種別】ごとに【入荷日付】が最新のデータを1件だけ抽出。
・ NO:7やNO:9のデータのように、【種別】と【入荷日付】が同じ場合は、【NO】が最大のデータを抽出。
No.2ベストアンサー
- 回答日時:
テンポラリをつかって同じコトができますね。
考え方は全く同じです。
CREATE TEMPORARY TEMPORARY TABLE temp
SELECT 種別,MAX(入荷日付) AS 入荷日付 FROM hoge
GROUP BY 種別;
CREATE TEMPORARY TABLE temp2
SELECT MAX(NO) AS NO
FROM hoge
INNER JOIN temp ON
hoge.種別=temp.種別
and hoge.入荷日付=temp.入荷日付
GROUP BY hoge.種別;
SELECT `hoge`.*
FROM hoge
INNER JOIN temp2
ON hoge.NO=temp2.NO
御礼が大変遅くなってしまい申し訳ありません!
上記の方法でもやってみたところ問題なく結果を出す事が出来ました。
このSQLを実装用にアレンジし、PHPでのデータ加工を加えて無事望むソースが完成しました。
私はよくSQLの記述でつまづくので今後はより学習に努めたいと思います。yambejp様の的確なアドバイスで効率的なソースを作る事ができたこと、本当に感謝申し上げます。
No.1
- 回答日時:
まず種別でgroup by して入荷日付のmaxをとり、その値でinner joinする。
その結果を種別でgroup by してNOのmaxをとり、その値でinner joinする。
テーブル名をhogeとしてこんな感じで
SELECT `hoge`.*
FROM hoge
INNER JOIN
(SELECT MAX(NO) AS NO
FROM hoge
INNER JOIN (
SELECT 種別,MAX(入荷日付) AS 入荷日付 FROM hoge
GROUP BY 種別) AS temp ON
hoge.種別=temp.種別
and hoge.入荷日付=temp.入荷日付
GROUP BY hoge.種別) AS temp2
ON hoge.NO=temp2.NO
お答えありがとうございます!
こちらのテスト環境で試したところ、ばっちり望み通りの結果がでました。
(このような形のサブクエリはやった事がなかったので大変参考になります。)
ただ、問題が発生しました。
これを本番環境に移して実行したところ、
テスト環境と本番環境ではMYSQLのバージョンが違うらしく、
構文エラーが出てしまいました。
面喰って調べたところ、本番環境では、4.0.24を使っており、上記の記述では無理らしいのです。
私の調査不足で大変申し訳ありません。
MYSQL4.0系でも対応できる(create temporary table等の)別の記述方法で、同じ結果が出ないものでしょうか?
もしおわかりになりましたら助かります。
どうぞよろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Visual Basic(VBA) Sheet1の出荷日と品名が並んだ表からSheet2の品名別出荷日別の個数一覧表を作っています。 オ 3 2022/12/01 23:54
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) VBAで、シート間の転記するコードを教えてください。 4 2023/03/26 10:43
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- 英語 不定代名詞"no..."の否定語noの及び範囲について 4 2022/08/04 11:11
- Excel(エクセル) 【詳しい方教えて下さい】EXCEL条件に一致する値の複数抽出 9 2022/04/29 10:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
count関数の値をwhere句で使用...
-
最大値の数をカウントしたい
-
SQLローダーCSV取込で、囲み文...
-
アクセスのレポートでレコード...
-
テーブルの最後(最新)のレコー...
-
【PL/SQL】FROM区に変数を使う方法
-
データ
-
2回実行のSQL文を1回にしたい
-
select文の実行結果に空白行を...
-
単一グループのグループ関数で...
-
入力データの半角スペースと全...
-
ファイルの漢数字の順番につい...
-
oracle DB内のデータを増幅す...
-
並べ替えについて
-
実人数と延べ人数
-
リストボックス内を昇順並べる方法
-
70000行以上のソートをしたいです
-
アクセスに関して。クエリの並...
-
引数によってwhere句を切り替え...
-
int型フィールドにnullを登録で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
count関数の値をwhere句で使用...
-
OUTER JOIN とgroup by
-
結合したテーブルに名前をつけ...
-
ストアドファンクションの再帰...
-
ビュー定義に集約関数を入れる...
-
SQL 自己結合で件数の条件指定
-
【初歩】項目別の合計件数をSQL...
-
最大値の数をカウントしたい
-
SQL 重複レコードの数え方
-
SQL カラムの値ごとの集計
-
市区町村別の件数をカウントす...
-
小数点以下桁数が最大の値に小...
-
同じテーブルでのUNION
-
ORDER BYで並び替えなんですが…
-
重複データを除外する際に条件...
-
初歩的な質問ですが、教えてく...
-
特定の数だけ取得するSQL文
-
複雑な並び替え処理
-
MySQLのselect文の設定に関して
-
Select文を含むUpdateの記述方...
おすすめ情報