質問: p2.code AND p2.release_at >= p1.release_at ) AND cost_sales != 0 ORDER BY code, release_at DESC; ``` ★1だと結果は6917件で、★2にすると25件になります。 ★1の結果 ![★1の結果](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/cd82782295e6bfc017140880cccbb4f4.jpeg) ★2の結果 ![★2の結果](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/756859f2d22de49ee4783ba67733f688.jpeg) ★1のほうが条件文を挿入しているので件数が少なくなりそうなのですが、実際はその逆になっているところが理解できません。 また、もっとよいSQLがありますでしょうか。 どなたかご教授してくださると嬉しいです。よろしくおねがいします。
回答: 外側の WHERE の AND cost_sales != 0 を外してみるとわかりやすいと思います。 code = 1301 がこのようになっているとします。 | release_at | const_sales | | --- | --- | | 2019-05-13 | 232446 | | 2019-05-10 | 231180 | | 2019-05-20 | 0 | | 2019-05-21 | 0 | ★1 は 4件すべて抽出されます。 ★2 は 下の2件が抽出されます。 そして、AND cost_sales != 0 をつけると★1 は 2件、★2 は 0件になります、 ★1 が要件を満たすならそのままでよさそうです。