0

SQL クエリに 2 つの条件のうち大きい方の条件を課すことは可能ですか?

たとえば、投稿のあるサイトを想像してみてください。過去 24 時間に作成された少なくともすべての投稿と少なくとも 10 件の投稿の両方が結果に含まれることが保証されるように投稿を要求する方法はありますが、いずれかの制限を不必要に超えないようにする方法はありますか?

つまり、過去 24 時間に作成されたすべての投稿が既にあるが 10 件の投稿がない場合は、10 件に達するまで投稿を追加し続けます。過去 24 時間をカバーするまで続行されますが、25 時間前の投稿と 10 を超える投稿の両方が含まれることはありません。

編集:私のモデルを投稿するリクエストに応えて。私のモデルは Rails で作成されているため、モデルを投稿する方法が正確にはわかりません。ただし、要するに、Post には created_at datetime 行があり、その上にインデックスがあります。

4

2 に答える 2

1

LIMIT定数が必要だと思いますが、createdフィールドにインデックスがある場合、一方の端からいくつかのレコードを取得するのはかなり効率的ですよね? 次のようなものはどうですか(SQLっぽい疑似コードで):

select * from posts
where created > min(one_day_ago,
                    (select created from posts
                     order by created desc
                     limit 1 offset 10));
于 2010-03-05T01:17:55.307 に答える
0

おそらく最も明確な解決策は、最新の 10 件を返す選択を作成し、最終日のすべてを返す別の選択を作成し、これら 2 つの選択の結合を使用することです。

これらの結合された select の 1 つは、常に他のものを完全に含むことになるため、最も効率的ではないかもしれませんが、私ならそうすると思います。

于 2010-03-05T02:02:40.567 に答える