SQL文の使い方とテーブルから日付順にIDを取得する方法
- SQL文を使用して、テーブルから日付順にIDを取得する方法について教えてください。
- データを表示するためのSQL文が分からず悩んでいます。テーブルから各IDを10件まで日付順に取り出すことは可能でしょうか。
- 具体的には、1つのページに10件までの日付順で並んだIDのデータを表示したいです。IDごとにまとめられ、最も新しい日付のデータが上に表示されるようにしたいです。
- ベストアンサー
SQL文を教えてください
いつもお世話になっております。 ウェブサイトを作っているのですが、以下のようなデータを表示するのに良いSQL文が分からず悩んでいます。 ID | DATE | DATA --+----------+----- 1 | 2010-11-11 | aaa 2 | 2010-11-11 | bbb 1 | 2010-11-10 | ccc 3 | 2010-11-12 | ddd 3 | 2010-11-11 | eee 4 | 2010-11-10 | fff 1 | 2010-11-12 | ggg 2 | 2010-11-12 | hhh 1 | 2010-11-12 | iii 3 | 2010-11-12 | jjj 1 | 2010-11-09 | kkk 1 | 2010-11-09 | lll 1 | 2010-11-08 | mmm 1 | 2010-11-08 | nnn 1 | 2010-11-07 | ooo 1 | 2010-11-07 | ppp 1 | 2010-11-06 | qqq 3 | 2010-11-05 | rrr 2 | 2010-11-13 | sss 5 | 2010-11-08 | ttt 6 | 2010-11-05 | uuu 7 | 2010-11-04 | vvv 8 | 2010-11-03 | www 9 | 2010-11-02 | xxx 10| 2010-11-01 | yyy 11| 2010-10-30 | zzz 上のようなテーブルから、各IDを10件まで日付順に取り出すことはできるでしょうか? 具体的には、1つのページに以下のように表示したいのです。 2 | 2010-11-13 | sss 2 | 2010-11-11 | bbb 1 | 2010-11-12 | ggg 1 | 2010-11-11 | aaa 1 | 2010-11-10 | ccc 1 | 2010-11-12 | iii 1 | 2010-11-09 | kkk 1 | 2010-11-09 | lll 1 | 2010-11-08 | mmm 1 | 2010-11-08 | nnn 1 | 2010-11-07 | ooo 1 | 2010-11-07 | ppp 3 | 2010-11-12 | ddd 3 | 2010-11-11 | eee 3 | 2010-11-05 | rrr 4 | 2010-11-10 | fff 5 | 2010-11-08 | ttt 6 | 2010-11-05 | uuu 7 | 2010-11-04 | vvv 8 | 2010-11-03 | www 9 | 2010-11-02 | xxx 10| 2010-11-01 | yyy ・各IDのうち、最も新しい日付のものが上にくる ・表示するIDは10件まで ・表示はIDごとにまとめて行う ・一つのIDに属するデータは10件までしか取り出さない 上記のことを実現する方法をご教授ください。 よろしくお願い致します。
- bulldozerQ
- お礼率64% (9/14)
- MySQL
- 回答数3
- ありがとう数4
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
補足です。 WHERE句のサブクエリに LIMIT を使うと下記の様に出来ますね。 リレーショナル演算子ではない ORDER BY / LIMIT を検索条件に入れるのは、ちょっときたない感じがしますが。 SELECT * FROM hoge_tbl a WHERE date IN (SELECT date FROM hoge_tbl b WHERE a.id = b.id ORDER BY date DESC LIMIT 10) AND id IN (SELECT id FROM hoge_tbl c GROUP BY id ORDER BY MAX(date) DESC LIMIT 10) ORDER BY (SELECT MAX(date) FROM hoge_tbl e WHERE a.id = e.id) DESC, id, date DESC, data
その他の回答 (2)
- root139
- ベストアンサー率60% (488/809)
> できればデータすべてを取り出すのではなく、 > 必要な数だけ取り出すようにしたいところです。 かなり強引ですが、下記の様にすればできるとは思います。 ただし、MySQL では未確認です。 SELECT * FROM hoge_tbl a WHERE (SELECT COUNT(*) FROM hoge_tbl b WHERE a.id = b.id AND a.date < b.date) < 10 AND (SELECT COUNT(*) FROM ( SELECT id FROM hoge_tbl c GROUP BY id HAVING MAX(date) > (SELECT MAX(date) FROM hoge_tbl d WHERE a.id = d.id) ) tmp) < 10 ORDER BY (SELECT MAX(date) FROM hoge_tbl e WHERE a.id = e.id) DESC, id, date DESC, data
- root139
- ベストアンサー率60% (488/809)
「表示するIDは10件まで」以外のことは、下記の様なSQLで出来るかと。 ただし、MySQL では未確認です。 SELECT * FROM hoge_tbl a WHERE (SELECT COUNT(*) FROM hoge_tbl b WHERE a.id = b.id AND a.date < b.date) < 10 ORDER BY (SELECT MAX(date) FROM hoge_tbl c WHERE a.id = c.id) DESC, id, date DESC, data ;
お礼
お礼が遅くなり申し訳有りませんでした。 お答えいただきどうもありがとうございます。 やはり上記のような条件では「表示するIDは10件まで」にするのは難しいのでしょうか。 お教えいただいた例をもとにLIMIT句を付け加えてみましたが、うまくいきませんでした。 やはり、できればデータすべてを取り出すのではなく、必要な数だけ取り出すようにしたいところです。 もう少し自分で考えてみます。 ありがとうございました。
関連するQ&A
- PerlでCSV形式のファイルの一部分だけを抽出する方法
Perlをやっていて困っていることがあります。 CSV形式のファイルを開いて、変数に代入した後の処理がわかりません。 どのようにしたいかというと・・・ aaa,bbb,ccc,ddd,eee,fff ggg,hhh,iii,jjj,kkk,lll mmm,nnn,ooo,ppp,qqq,rrr sss,ttt,uuu,vvv,www,xxx yyy,zzz,111,222,333,444 というファイルを読み込んだとします。その後 'fff' の部分だけをスカラー変数に取り込みたいときにはどのような 関数を実行すればいいのでしょうか。 困っています、お願いします。
- ベストアンサー
- Perl
- csv形式のデータの一部を削除して、上書きする方法
前回も似たような(?)質問をしたんですが 今回も質問させてください。CSVに関して(CSVだけというわけではありませんが) 以下のようなデータを読み込んで、配列変数に格納後... aaa,bbb,ccc,ddd eee,fff,ggg,hhh iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt ↑のデータを、下のようなデータにして、保存しなおすにはどうすればよいでしょうか。(上から二列目を削除して前のデータに保存しなおす) aaa,bbb,ccc,ddd iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt 変な質問でもうしわけございませんが、回答できるかたお願いします。
- ベストアンサー
- Perl
- centerタグを使わないで中央よせ
画像のようなレイアウトがしたいです。 centerタグを使って以下の様に書きました。 <html> <head> <meta http-equiv='Content-Style-Type' content='text/css'> <style> .text100 { width: 100; text-align: left; } </style> </head> <body> <center> <img src='./picture.jpg'> <p class='text100'> aaa bbb ccc eee fff ggg hhh iii jjj kkk lll mmm nnn ooo ppp qqq rrr sss ttt uuu vvv www xxx yyy zzz </p> </center> </body> <html> しかしcenterタグは非推奨との事なので、これをcenterタグを使わないで書くのはどうしたらよいでしょうか? やりたいことは画像は中央に、文章は幅100pxの中で左よせ、なのだけど、文章の固まりとしては中央に置きたいのです。 よろしくお願いいたします。
- ベストアンサー
- CSS
- SQL 複数条件を設定
使用言語はjavaで処理しており、 SQL Server2005にて下記のようなテーブル(T_Kekka)があります。 ID a-1 a-2 b-1 b-2 c-1 c-2  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1 bbb aaa ddd ccc eee fff 2 ggg bbb ccc hhh iii jjj 3 bbb mmm ddd ccc fff eee 4 bbb aaa ccc ddd qqq rrr 5 zzz sss ttt ccc vvv xxx 6 zzz aaa ttt ccc vvv fff 7 zzz zzz zzz zzz zzz zzz 8 qqq rrr ccc ddd fff eee 検索する値は下記の通りです。 検索値 |a-1|a-2|b-1|b-2|c-1|c-2|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |aaa|bbb|ccc|ddd|eee|fff| 期待値としては、aはaのグループで検索、bはbのグループで検索、cはcのグループで検索をし、 一致個数の多い順に出力したいと考えております。(理想は下記のような感じです。) また、グループ内であれば逆転していてもOKです。 (例えばID:1のaグループのような感じです。) *1 一致数が同じ場合はcグループの数が多いデータが最優先となり、その他はID順になります。 期待値 ID a-1 a-2 b-1 b-2 c-1 c-2 一致数  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1 bbb aaa ddd ccc eee fff 6 3 bbb mmm ddd ccc fff eee 5 8 qqq rrr ccc ddd fff eee 4・・・*1 4 bbb aaa ccc ddd qqq rrr 4 6 zzz aaa ttt ccc vvv fff 3 2 ggg bbb ccc hhh iii jjj 2 5 zzz sss ttt ccc vvv xxx 1 7 zzz zzz zzz zzz zzz zzz 0 知識不足のため私には複雑すぎて悩んでいる状況なので、 どなた様か知識がある方にご教授願いたく思います。 また、まだテスト段階なので現状のようなテーブル構造にしてしまいましたが、 他のテーブル構造の方がデータが抽出しやすかったり、レスポンスがいい場合がありましたら、 ご教授いただけると助かります。 説明が分かりづらく表が見づらくて申し訳ございませんが、 宜しくお願い致します。
- ベストアンサー
- SQL Server
- セルの数字を抽出して一列にする方法を教えてください
下記のような結果を出したいのですが、 関数を教えていただけませんでしょうか。 ※1はaaaとbbbがあるので、それをまとめてaaabbbとしたいです。 イメージとしてはCONCATENATEのような。 ●元データ 1 aaa 1 bbb 2 fff 2 ggg 2 hhh 3 iii 3 jjj 3 kkk 3 lll 3 mmm 3 nnn 4 ooo 5 ppp 5 qqq ●完成 1 aaabbb 2 fffggghhh 3 iiijjjkkklllmmmnnn 4 ooo 5 pppqqq よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- EXCEL97のマクロ処理について
EXCEL97のマクロ処理について教えてください。 下記のシート例のようなシート(アクセスのクロス集計のようなもの)を最初に複数範囲指定(アクティブ)します。その後にその範囲指定したなかで項目が1~5まで全て同じモノだけを統一して、種類で存在するものも統一させます。一つ目のものに種類1がなくても同一のものに種類1があれば統一後のデータは種類1の列に"1"がつくようにします。ちなみに種類はその時によりどれだけ存在するかわからないのが前提です。削除するデータは回路Noが大きいものを消すようにします。下がそのデータの例です。 =============== エクセルシート例 =================================== 回路No 項目1 項目2 項目3 項目4 項目5 種類1 種類2 種類3 ... 1 AAA BBB CCC DDD EEE 1 1 1 FFF DDD UUU DDD OOO 1 1 1 UUU PPP TTT DDD EEE 1 1 2 AAA BBB CCC DDD EEE 1 1 2 XXX QQQ SSS NNN MMM 1 1 ↓ マクロ処理後 回路No 項目1 項目2 項目3 項目4 項目5 種類1 種類2 種類3 ... 1 AAA BBB CCC DDD EEE 1 1 1 1 FFF DDD UUU DDD OOO 1 1 1 UUU PPP TTT DDD EEE 1 1 2 XXX QQQ SSS NNN MMM 1 1 ================================================================== シート選択後ボタンによりマクロ処理されるように考えています。どうか宜しくお願い致します。
- ベストアンサー
- オフィス系ソフト
- EXCEL VBA split関数について
Excel VBA初心者です。 split関数についてどなたか教えていただけないでしょうか。 aaa,bbb,ccc,eee fff,ggg,hhh,iii jjj,kkk,lll,mmm というデータがあるとして、そこから aaa bbb fff ggg jjj kkk これだけ(左から2個分)を抜き取りたいのですが可能でしょうか? カテ違いな質問でしたらスミマセン。
- ベストアンサー
- オフィス系ソフト
- スペース区切りのテキストデータ
VB2005.netを使っています。 スペース区切りの2つのテキストデータが 2つのTEXTBOX内あります。 AA BBB CCC DD EEE FF GGG HHH II JJJ AA LLL MMM NN OOO FF QQQ RRR SS TTT このAAの列とCCC列を抜き出して表示させ、 AA CCC-MMM FF HHH-RRR といった計算の後の数字を行にして表示 させたいのですが、何かよい方法があるでしょうか? よろしくお願いします!
- 締切済み
- Visual Basic
- awkで、空欄箇所を埋めたい
awkを使って、下記処理前データを処理後データの形式 にしたいのですが、上手いやり方が分かりません。 宜しくお願いいたします。 ■処理前データ ABC 12345 MMM NNN PPP QQQ EFG 6789 RRR SSS TTT ■処理後データ ABC 12345 MMM ABC 12345 NNN ABC 12345 PPP ABC 12345 QQQ EFG 6789 RRR EFG 6789 SSS EFG 6789 TTT
- ベストアンサー
- その他(プログラミング・開発)
- 2つの区分で並び替えたい
EXCEL2010 下記の様な並び替えをする方法について教えていただきたく。 A列にA,B,Cといった文字列データがA,Bの場合とA,B,Cの場合で配置されます。 また、別の文字列データでRRR,SSS,TTT,UUU,VVVのデータが 最少5つ。最大9でRRR~ZZZまで配置されます。 両者はランダムに配置されています。 A~Cのデータはひとまとめ。 RRR~ZZZまでのデータもひとまとめでB列に配置したいです。 最初のデータ群で3つ目のデータが無ければ空欄にします 尚、 A~Cの末尾は同じ文字列が入っています。実が入ります。 例1 A列 B列 A実 A実 RRR B実 SSS TTT RRR B実 SSS UUU TTT VVV UUU VVV 例2 A列 B列 A実 A実 RRR B実 SSS C実 TTT RRR B実 SSS UUU TTT C実 UUU VVV VVV WWW WWW というイメージにしたいのです。 元々A列にある並びはそのまま。 A列に配置されたデータに対し、 最初のデータ群を3つのかたまりでひとまとめ、 末尾が実を最初に表示するにする構成です。 フラグを立てて末尾が実を先頭に持ってくるまでは出来そうですが、 3つ目が無い場合に空欄にする処理で悩んでいます。 関数でもVBAでもどちらでも構いません。 よろしくお願いします。
- ベストアンサー
- Excel(エクセル)
お礼
お礼が遅くなって申し訳ありません。 質問したSQL文の件は、無理があってダメなんだろうとほとんどあきらめていたのですが、実現でき感激しております。 サブクエリーをうまく使うことで、通常ではできないようなこともなんとかなってしまうのですね。 感謝してもしきれません。 本当にありがとうございました。