質問: 'TRUE' and T1.START_DATE < "実行時刻" ORDER BY T1.START_DATE DESC ●得られた結果 |COUNTER|DATA_ID|START_TIME|CAT_ID|CAT_SUB_ID| |3|3|2016-04-01 15:10:00|--|--| |1|4|2016-04-01 15:00:00|--|--| |2|1|2016-04-01 14:00:00|--|--| |1|2|2016-04-01 13:25:00|--|--| ●質問内容 こちら、上記の件を解決させたいのが第一なのですが、今後の為に次の点も教えていただけると助かります。 1)MySQLにおける、countの実行タイミング(上記の結果を見ると、WHERE句の実行時という認識で大丈夫でしょうか?) 2)サブクエリ実行時は、外部結合が使用できない? それとも上記の記述がまずい? よろしくお願いいたします。
回答: ``` SELECT ( SELECT COUNT(*)+1 FROM tblA as T2 WHERE T1.START_TIME < T2.START_TIME AND T2.CAT_ID = T1.CAT_ID ) AS counter , T1.* ,T3.CAT_SUB_ID FROM tblA AS T1 LEFT JOIN tblB T3 ON T2.CAT_ID = T3.CAT_ID ORDER BY T1.START_TIME DESC ``` 動作確認はしていませんがこんな感じでしょうか? やってみたSQLにはサンプルテーブルに無い要素がありましたが、サンプルテーブルデータのほうに合わせたコードにしています。 > > 1)MySQLにおける、countの実行タイミング > > > そのクエリ内のほかの句を実行した後です。 > > 2)サブクエリ実行時は、外部結合が使用できない? > > > できます。やってみたSQLでは、最初のサブクエリでcount(*)+1しか出力していないので、何を結合しても出力されるのはカウントだけだったということになります。 ※そもそもselect句内のサブクエリで複数項目出力はできなかったように思います。(自信無い)