繁体   English   中英

如何通过查询集获取最新记录。 喜欢分组

[英]How can I get latest record by queryset. like group by

数据

姓名 数据1 数据2 创建日期
钢铁侠 ia 伊布 1630000000
绿巨人 乙肝 1630000000
绿巨人 慧聪 高清 1630500000
队长 CB 1630000000
队长 抄送 光盘 1630500000
队长 ce 比照 1630590000

我想获取每个名称的最新数据

姓名 数据1 数据2 创建日期
钢铁侠 ia 伊布 1630000000
绿巨人 慧聪 高清 1630500000
队长 ce 比照 1630590000

像这样

wish_data = [
    {'name':'iron man', 'data1': 'ia', 'data2': 'ib', 'create_date':1630000000},
    {'name':'hulk', 'data1': 'hc', 'data2': 'hd', 'create_date':1630500000},
    {'name':'captain', 'data1': 'ce', 'data2': 'cf', 'create_date':1630590000},
]

我试过...

    Model.objects.filter(**conditions).values_list('name').annotate(cdate=Max('create_date'))
    
=> [('iron man', 1630000000), ('hulk', 1630500000), ('captain', 1630590000)]>

但我需要其他列...

ORM有可能吗? 还是我必须用 for 和 if 语句编写逻辑?

例如

wish_data = []
for name, data1, data2, create_date in Model.objects.filter(**conditions).values_list('name', data1, data2, 'create_date').order_by('-create_date'):
if name not in data:
    wish_data.append(
        {
            wish_data['name'] = name
            wish_data['data1'] = data1
            wish_data['data2'] = data2
            wish_data['create_date'] = create_date
        }
    )

对的,这是可能的。 您可以在 django orm 查询中一起使用distinctorder_by来获取您的wish_data 查询将是这样的:

distict_avengers = Model.objects.filter(**conditions).distinct("name").order_by("name", "-create_date").values("name", "data1", "data2", "create_date")

如果您将print(distict_avengers)那么您将看到以下结果:

[
  {"name": "captain", "data1": "ce", "data2": "cf", "create_date": 1630590000},
  {"name": "hulk", "data1": "hc", "data2": "hd", "create_date": 1630500000},
  {"name": "iron man", "data1": "ia", "data2": "ib", "create_date": 1630000000},
]

请注意,在使用时域上使用不同的不支持SQLite和也distinct ,并order_by在上述领域一起order_by必须始终在上述领域开始distinct

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM