- ベストアンサー
MySQLで日付ごとのdistinctなstation数の1ヶ月分の合計値を求める方法
- MySQLのバージョン「5.1」をCentOS5.8上で使用しています。日付ごとのdistinctなstationの個数を求め、1ヶ月分の合計値を算出するSQL文を作成したいと思っています。現在のSQL文では日付の区別がなく固有のstationの個数が求められてしまい、望む結果を得ることができません。どのようなSQL文を作成すれば、日付ごとのdistinctなstation数の1ヶ月分の合計値を正確に算出することができるでしょうか。
- 例えば、2013年11月のデータを考えます。日付ごとにdistinctなstationの個数を求め、それらを合計して1ヶ月分の合計値を求めたいと思っています。現在のSQL文では、日付の区別がないために固有のstationの個数が求められてしまい、望む結果を得ることができていません。どのようなSQL文を作成すれば、日付ごとのdistinctなstation数の1ヶ月分の合計値を求めることができるのでしょうか。
- MySQLのバージョン「5.1」を使用しており、CentOS5.8上で動作させています。日付ごとのdistinctなstationの個数を求め、1ヶ月分の合計値を算出するためのSQL文を作成したいと思っています。現在のSQL文では、日付の区別がないために固有のstationの個数が算出され、望む結果を得ることができません。どのようなSQL文を作成すれば、日付ごとのdistinctなstation数の1ヶ月分の合計値を正確に求めることができるのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
select count(distinct date,station) from table_name where date between '2013-11-01' and '2013-11-30' みたいな感じじゃない? dateをlikeで絞り込むのはちょっとねぇ・・・
その他の回答 (2)
- Siegrune
- ベストアンサー率35% (316/895)
日付毎の個数だけ出ても良く分からない結果になると思うので。 select date,count(distinct station) from table_name where date between '2013-11-01' and '2013-11-30' group by date order by date 私も日付をlike で範囲指定するのはちょっと?です。 dateとなっているけど日付&時刻が入っていて 最終日のデータがうまくヒットしないなら、 where date >= '2013-11-01' and date < '2013-12-01' とするとか、23:59:59を指定すればいいだけと思うし。 '2013-11-01'も本当は、日付型の書き方があったはずなので、 そうすべきなんですが ・・・調べていないので調べてみてください。 (書き方がわからなければ日付型に変換する関数を調べて書いてもらえるといいと思います。) 日付といいながら、charやvarcharで定義してあるなら、 likeでも、上の書いた表記でもいいと思います。 ・・・なんでこんなことを言うかというと、日付型の項目の場合、インデックスを作っても likeや上記のような記述だと、暗黙の型変換が行われて、インデックスを使ってくれない という困ったことが起きる可能性があるからです。 (一般論で、mySQLについてはしらべてはいないですが。)
お礼
Siegrune さん 日付部分に関するアドバイスありがとうございます。 大変参考になりました。 私自身、この部分をあまり理解せずに進めてきている部分があり、これを機に、少し勉強してみたいと思います。 ありがとうございました。
- trajaa
- ベストアンサー率22% (2662/11921)
『日付ごとのdistinctなstationの個数』を抽出するクエリーをサブクエリーとして定義し そのサブクエリーから件数を集計すれば良いと思うけど?
お礼
ご回答いただきましてありがとうございました。 別のアプローチで解決しましたが、 サブクエリの方法でも確かに出来ました。 ありがとうございました。
お礼
yambejp さん お礼が遅くなり失礼しました。 教えていただきましてありがとうございました。 yambejp さんに教えていただいた方法で解決いたしました。 また、betweenの件も、大変勉強になりました。