2017-09-14 16 views
1

私はこのようなモデルを持っています毎日!DjangoのORMは:私が最も価格ですべてのオブジェクトのリストを取得したい</p> ​​ <p>:グループレコードのフィールドによると、各グループ内で最大フィールド値を持つレコードを取得するには、

{ 
    2017-01-01: {"date": 2017-01-01, "price": 1000, "volume": 210}, 
    2017-01-02: {"date": 2017-01-02, "price": 1032, "volumne": 242}, 
    . 
    . 
    . 
} 

これを1つのクエリで行うことはできますか?データベースは比較的大きく、日付のループを実行することは機能しません。

+0

私はあなたに従来のクエリを簡単に十分に示すことができましたが、あなたのdjango環境でそれを動作させる方法を見つけなければなりません。これが必要な場合は、https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-veryを参照してください。 -simple-sql-query – Strawberry

答えて

2

あなたは、特定の日付

from django.db.models import Max 

Foo.objects.values('date').annotate(max_price=Max('price')) 

編集のための最大の価格を取得するには、このような何かを行うことができます:あなたは、特定の日付の最大の価格を持っているオブジェクト全体を取得したい場合、あなたはそれを達成することができますOuterRefSubqueryを通じて、与えられた日付の最大価格値を持つオブジェクトを取得するには、サブクエリを作成し、このサブクエリによってメインクエリセットをフィルタリングします

from django.db.models import Max, Subquery, OuterRef 

subquery = Foo.objects.filter(date=OuterRef('date')).order_by('-price') 
queryset = Foo.objects.filter(price=Subquery(subquery.values('price')[:1])) 

この

ジャンゴ1.11でサポートされています。サブクエリの詳細については、 Django docsを参照してください。

+0

これは最大価格のみを返します。私は最大の価格を持っているオブジェクトが欲しい! (私もそのボリュームが欲しい) – Navid777

+0

ああ、面白い。私の答えを更新しました – arjun27

関連する問題