質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

date

dateは、date型や日付に関する関数や処理についてのタグです

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

3575閲覧

【SQL】WHERE条件で指定した通りの結果が返ってこない

sujico.net

総合スコア453

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

date

dateは、date型や日付に関する関数や処理についてのタグです

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2018/09/03 09:00

編集2018/09/18 07:55

##現在の課題
あるテーブルで、過去データを正常に取得できません。
データはテーブルに入っているようなのですが、発行したクエリのWHERE条件と想定する結果が異なっており、
その原因を解決することが出来ず困っております。

##実行したクエリ

SQL

1SELECT 2 MIN(xxx_type) 3 , target_date 4 5FROM 6 TEST_TABLE

##テーブル定義

SQL

1SHOW COLUMNS FROM TEST_TABLE; 2```の結果です。 3 4※テーブル名やクエリ名は仮のものです。 5 6|Field|Type|Null|Key|Default|Extra| 7|:--|:--:|--:| 8pri_id|int(11)|NO|PRI|NULL|auto_increment 9target_date|date|NO|PRI|0000-00-00| 10xxx_type|int(11)|YES|MUL|NULL| 11 12 13あまり多くない情報の中大変恐縮ではありますが、 14何か原因に心当たりのある方がいれば、ご教示いただきたく存じます。 15 16何卒宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

SELECT

xxx_type
, condition_id
, target_date
・・・
GROUP BY
target_date

MySQLでは拡大解釈してエラーにはならいですが厳密には文法違反
group by で利用したカラム以外を集計関数なしにselect句ではつかえません

今回でいうとxxx_typeとcondition_idは違反、ただしxxx_typeは1が確定
しているので100歩ゆずって問題ないですがcondition_idは複数あるのであればNGです

たとえばMIN()などで処理してみるとか・・

投稿2018/09/03 09:09

yambejp

総合スコア114583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sujico.net

2018/09/03 09:25

ありがとうございます。読み返してみると確かに怒られそうなクエリでした。(MySQLだと甘々判定なんですね、、) SELECTで使用しているxxx_typeとcondition_idにMIN()で集計をしてみましたが、結果は変わりませんでした。 condition_idは複数ありますが、質問の上で少しでも分かりやすくする為に付け加えただけなので、condition_idはSELECTから外して検証しています。 現状の環境ですと、あっても外しても1月分しか出力されませんでした…。 ご回答頂きありがとうございます。
yambejp

2018/09/03 09:46

あ、よくみたらcondition_id=1も絞り込んでしますね そうなるとtarget_dateが2月のデータしか無いように思えますが 仮にtarget_date >= "2018-03-01"を選ぶと target_dateが3月のデータしか表示されないのでしょうか? あまり関係ないですが日付の範囲してはbetweenの方が直感的ですね target_date BETWEEN "2018-02-01" AND "2018-09-01" - INTERVAL 1 DAY
sujico.net

2018/09/03 09:51 編集

そうですね、まさに今しがた検証結果の追記をさせていただいたのですが、 target_date >= "2018-03-01"ならば"2018-03-01"のデータのみが表示されます。 (本当はそこで日付の範囲指定の分が出て欲しい) クエリの校正頂きありがとうございます! BETWEENに直してみました。結果は変わりませんでしたが、確かにこちらのほうが分かりやすいかもしれません。ありがとうございます。
sujico.net

2018/09/04 00:18 編集

> あ、よくみたらcondition_id=1も絞り込んでしますね > そうなるとtarget_dateが2月のデータしか無いように思えますが > 仮にtarget_date >= "2018-03-01"を選ぶと > target_dateが3月のデータしか表示されないのでしょうか? こちら、何故お分かりになったのでしょうか? もしかしてcondition_idが要因の可能性があるということでしょうか?
yambejp

2018/09/04 06:49

あー、なんか勘違いがあるかもしれないので途中経過は一旦わすれてもらってよいかも create tableとinsert intoでサンプルデータを提示してもらうのが一番ですね その上でご提示のSQLに問題があるならご指摘できると思います ただ複製したtableで同じSQL文をうって正しいデータが得られているなら なにかおかしな設定がされているかテーブルが壊れているだけかもしれません。 (たとえばLimit 1 のような設定が万が一されていればご提示のように1行しかとれないはず)
sujico.net

2018/09/04 08:49

なるほど・・・。 実際と全て同じ構造は少し出せない為、申し訳ございません、ありがとうございました。 ちなみにご参考までになのですが、CHECK TABLEなどで調査してなんのエラーも出てこなくてもテーブルが破損してしまっているということはありうるのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問