私はsqlite3
をpythonで使用してというフィールドの"Title,Date,Author"
というsqliteテーブルからデータを取得しています。著者の名前は私が'foo'
ない次の最古の著者を選択したいと思います。その場合には'foo'
、しかしでない限り、それぞれのユニークなタイトル(グループ)については、私は、その日付の最小Date
とAuthor
を選択します最も早い日付を保持してください。すべての作者が'foo'
なら、その場合は問題ありません。Python sqlite3例外を持つグループから最小値を選択する
私の以前のクエリは、'foo'
であるかどうかにかかわらず、最小日付の著者を選んだだけなので、最後の仕様を満たさない"SELECT Title,min(Date),Author FROM Documents GROUP BY Title"
でした。
私はcreate_aggregateで集約関数を作成し、'foo'
をフィルターに掛けることを考えていましたが、私は次の最も早い著者を確実に得る方法がわかりません。サブクエリやCASE式ではもっと簡単になるかもしれませんが、私はあまりよく分かりません。
これはどのように達成できますか?あなたが仕事をするために2つのクエリとPythonを使ってもかまわない場合
返信いただきありがとうございます。 Pythonでは、min_date_by_titleと 'SELECT Author、min(Date)WHERE Title = [現在のタイトル]とAuthor!= 'foo''を繰り返し実行するforループを1つ実行して、著者はそれが何も得られない場合、より高速かもしれません。私はそれが時間を節約し、パフォーマンスを向上させる傾向があるが、sqliteクエリで直接行う方法があるかどうかは不思議でした。 – dieggsy
@therockmandolinist私は、内側のループを暗示していても、フェッチするタイトルの数が何であれ2つのクエリだけを実行するよりも、各タイトルのクエリを実行する方がより多くの消費量を要すると確信しています。ただし、単一の問合せ内で実行する方法はいくつかありますが、これはおそらく複雑な問合せにつながりますが、これはコードの保守性には適していません。非常に大量のデータの場合は – julienc
ですが、外部ループの不要な項目をループしなければならないというわけではありませんか?私が見たことから、クエリを実行することは本当に速くなる可能性があるので、内部ループespよりも速いと思っていました。より多くのタイトルで - しかし、私の経験は非常に限られているので、正しいかもしれません。複雑なクエリについては同意しますが、パフォーマンス面ではおそらくそれが望ましいと思われます。 – dieggsy