0

我有两张桌子,例如:

用户:

身份证 | 姓名 | 年龄 |

1 | 潘胡里 | 24

2 | 内哈 | 23

3 | 莫娜 | 25

另一个价格日志:

身份证 | 类型 | 用户 ID | 价格 | created_at|

1 | 信用 | 1 | 100 | 2021-03-05 12:39:43.895345

2 | 信用 | 2 | 50 | 2021-03-05 12:39:43.895345

3 | 借方| 1 | 100 | 2021-03-04 12:39:43.895345

4 | 信用 | 1 | 100 | 2021-03-05 12:39:43.895345

这是我的两张表,我需要从中获得最高信用价格用户,他们的总价格计数与上周日期一致。

我想要这样的结果:

就像如果我想获得用户 id 1 的结果,那么结果应该是:pankhuri on date 04/03 price 100

并在日期 5

pankhuri 日期 05/03 价格 200

只希望最高价格的用户退休,他们的价格总和基于日期i。

4

2 回答 2

0

您可以使用GROUP BY,ORDER BY data DESC/ASCMAX使用子查询。

于 2021-03-11T05:44:36.183 回答
0

我会假设您的模型名称是PriceLog,如果我猜对了,您希望:

  1. 筛选类型为的记录credit并获取上周的记录
  2. 分组user_id并创建别名字段:total_pricemax_price为每个相应的用户

可能的解决方案是:

from datetime import datetime, timedelta

from django.db.models import Sum, Count, Max, F

queryset = PriceLog.objects.filter(
    type='credit',
    created_at__gte=(datetime.now() - timedelta(days=7)),  # Filtering for records created in last 7 days
).values(
    'user_id'
).annotate(
    total_price=Sum(F('price')),
    max_price=Max(F('price'))
)

这应该会为您返回一个这样的 QuerySet:(根据您提供的数据)

<QuerySet [{'user_id': 1, 'total_price': 200, 'max_price': 100}, {'user_id': 2, 'total_price': 50, 'max_price': 50}, ... ]>

然后,要获得特定用户的结果,您可以queryset使用简单的查询.get()

>>> queryset.get(user_id=1)
{'user_id': 1, 'total_price': 200, 'max_price': 100}  # Output
于 2021-03-11T06:22:00.010 回答