2017-02-15 6 views
0

フィールドに基づいてクエリから重複を削除したいと思います。 私は値だけでなくオブジェクトも取得したくありません。 ORMは、削除する行と保存する行の選択に応じて選択する必要があります。特定のフィールドに基づくクエリで重複を削除します

のは、この例を使ってみましょう:

name - date - value 
chris - 1/1/2012 - 12 
youssef - 1/02/2015 - 13 
trump - 1/8/2017 - 12 
chris - 1/12/2018 - 21 
trump - 1/03/2019 - 29 

出力は次のようになります。

name - date - value 
trump - 1/03/2019 - 29 
chris - 1/12/2018 - 21 
youssef - 1/02/2015 - 13 

基本的に、私は、日付順に基づいて(それが動作しない)のようなものを重複を削除したいです:

Table.objects.order_by('-date').distinct('name').order_by('-value') 

ORMはこのクエリを処理できますか?それとも関数を書くべきでしょうか?

+0

チェックアウト[このポスト](http://stackoverflow.com

私の問題を解決する唯一の方法は、この関数を記述することでした/ questions/6648545/django-query-with-distinct-and-order-by)。それは、あなたがしようとしていることについていくつかの洞察を提供するかもしれません。 – Neelik

+0

ありがとうございますが、私は問題を解決するためにそれを使用できませんでした。 –

答えて

0

ORMを使用して解決策が見つかりませんでした。

def remove_duplicate_based_on_date(query): 
    name_visited = [] 
    pk_to_be_deleted = [] 
    for object in query: 
     if not(object.name in name_visited): 
      name_visited += [object.name] 
     else: 
      pk_to_be_deleted += [object.id] 
    return pk_to_be_deleted 

とこのようにそれを使用します:

base_query = Table.objects.order_by('-created_at') 
pk_to_be_deleted = remove_duplicate_based_on_date(base_query) 
base_query.filter(id__in=pk_to_be_deleted).delete() 
関連する問題