SQLが上手く作れないためお知恵をお貸し頂ければ幸いです。
articleテーブルに存在するユーザの一覧に、記事の投稿件数、記事に含まれるsizeの最大値、最大値が投稿された記事の登録日時、記事のタイトルを加えたものを抽出したいです。
[ article ]
article_id user_id size insert_unixtime title
----------------------------------------------------------
1 100 18 20130101 aaaaaaaaaaaa
2 100 10 20130102 bbbbbbbbbbbb
3 100 18 20130103 cccccccccccc
4 200 11 20130201 dddddddddddd
↓↓希望する抽出結果↓↓
article_id user_id count max_size insert_unixtime title
----------------------------------------------------------
3 100 3 18 20130103 cccccccccccc
4 200 1 11 20130201 dddddddddddd
自己結合等で、ユーザ毎の最大sizeを抽出してそれに該当するレコードを探すことであるていどはできたのですが
最大sizeが複数あった場合に、両方のレコードを取得してしまいます。(上記の例では、article_id 1と3を抽出してしまう。
※最大sizeが複数会った場合はinsert_unixtimeが大きい方のタイトルを表示したい。
うまく1SQLで抽出できないでしょうか。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ユーザ毎の、article数とsizeの最大値、sizeの最大のものの登録日時とタイトルが取得したいという事ですよね?
下記の様なSQLで出来ると思います。(Ver. 5.5.8 で確認)
----------------------------------------
SELECT
article_id,
user_id,
(SELECT COUNT(*) FROM article c WHERE a.user_id = c.user_id) AS count,
size AS max_size,
insert_unixtime,
title
FROM article a
WHERE NOT EXISTS (
SELECT * FROM article b
WHERE a.user_id = b.user_id AND (a.size < b.size OR a.size = b.size AND a.insert_unixtime < b.insert_unixtime)
)
----------------------------------------
WHERE句では、user_id が同じで size が大きいものと同じ size で insert_unixtime が大きいものが無いという条件、つまり、その user_id で最大 size, insert_unixtime のレコードを取得する条件を書いています。
No.1
- 回答日時:
こういうことですか?
select article_id, user_id, size, insert_unixtime, title from article join (select max(article_id) as article_id from article where (user_id, size) in (select user_id, max(size) as size from article group by user_id) group by user_id) t using (article_id);
INサブクエリなら
select article_id, user_id, size, insert_unixtime, title from article where article_id in (select max(article_id) as article_id from article where (user_id, size) in (select user_id, max(size) as size from article group by user_id) group by user_id);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数テーブルのGROUP BY の使い...
-
メルペイとメルペイid決済の違...
-
1テーブル&複数レコードの更新...
-
エクセルの関数について教えて...
-
フィールド名を変数で指定するには
-
エクセルからOutlookメールを起...
-
VBでストアドプロシージャ一覧...
-
SQLite3でこんな便利なSQLはで...
-
エクセルで最後の文字だけ置き...
-
MySQLのストアドプロシージャ記...
-
insertを高速化させたい
-
バインド変数について
-
カラム情報取得方法
-
SQL Left Join で重複を排除す...
-
クエリ表示と、ADOで抽出したレ...
-
VMware Player でCD-ROMドライ...
-
Access:クエリーにて集計後に...
-
1、Rstudioで回帰直線を求める...
-
カーソル宣言をIFで分けられま...
-
フィルターかけた後、重複を除...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
select文のwhere句に配列を入れ...
-
VIEWの元のテーブルのindexって...
-
PL/SQLの変数について
-
マイクラPC版のコマンドで効率...
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
sqlで、600行あるテーブルを100...
-
Access パラメータクエリをcsv...
-
Unionした最後にGROUP BYを追加...
-
inner joinをすると数がおかし...
-
複数テーブルのGROUP BY の使い...
-
ある条件の最大値+1を初番する...
-
MySQLのint型で001と表示する方...
-
クエリ表示と、ADOで抽出したレ...
-
[MySQL] UNIQUE制約の値を更新...
-
テーブル名を省略して「h.id」...
おすすめ情報