【问题标题】:How can I get latest record by queryset. like group by如何通过查询集获取最新记录。喜欢分组
【发布时间】:2021-12-16 17:43:50
【问题描述】:

数据

name data1 data2 create_date
iron man ia ib 1630000000
hulk ha hb 1630000000
hulk hc hd 1630500000
captain ca cb 1630000000
captain cc cd 1630500000
captain ce cf 1630590000

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

name data1 data2 create_date
iron man ia ib 1630000000
hulk hc hd 1630500000
captain ce cf 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
        }
    )

【问题讨论】:

  • 您在这个项目中使用的是哪个数据库?您需要从中获取不同的数据,然后使用名称和最新数据查询对其进行分组。
  • this answer 可能会有所帮助

标签: python django


【解决方案1】:

是的,这是可能的。您可以在您的 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,当同时使用 distinctorder_by 时,order_by 中提到的字段必须始终以 distinct 中提到的字段开头。

【讨论】:

  • 非常感谢!你帮了大忙 :) 谢谢你告诉我注意事项
猜你喜欢
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 2016-10-15
  • 2011-08-06
  • 2011-10-26
相关资源
最近更新 更多