Django查询每月的最后一条数据

查询每月的最后一条数据

在这个示例中,我们将演示如何使用Django查询Book数据表中姓名为"张三"的每月的最后一条数据。

数据模型

首先,我们定义了一个Book模型,具有以下字段:

python 复制代码
from django.db import models

class Book(models.Model):
    name = models.CharField(max_length=64, verbose_name="姓名", default=None, null=True)
    id_no = models.CharField(max_length=24, verbose_name="身份证号", default=None, null=True)
    mobile = models.CharField(max_length=11, verbose_name="手机号", default=None, null=True)
    create_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间', db_index=True)

该模型包含了nameid_nomobilecreate_at字段。

查询每月的最后一条数据

现在,我们将展示如何查询每月的最后一条数据:

python 复制代码
from django.db.models import Max, Subquery
from django.db.models.functions import ExtractMonth

last_per_month = (
    Book.objects.filter(name="张三")
    .annotate(month=ExtractMonth('create_at'))
    .values('month')
    .annotate(max_create_at=Max('create_at'))
    .values('max_create_at')
)

queryset = Book.objects.filter(
    name="张三",
    create_at__in=Subquery(last_per_month)
)

在这个示例中,我们按照以下步骤进行操作:

  1. 使用annotateExtractMonth函数计算每条记录的月份值,并将结果存储在month字段中。
  2. 使用values方法获取month字段的唯一值。
  3. 使用annotateMax函数计算每个月的最大create_at值,并将结果存储在max_create_at字段中。
  4. 使用values方法再次获取max_create_at字段的唯一值。
  5. 使用子查询在filter子句中获取每月的最后一条数据。

现在,queryset将包含每月的最后一条数据的QuerySet对象,你可以根据需要进行进一步的操作或使用该对象。

相关推荐
java_logo1 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
广州灵眸科技有限公司9 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
憧憬成为web高手11 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学12 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh14 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z1234567898614 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD15 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo15 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
Ai_easygo15 小时前
MCP 协议实战:用 Claude Desktop 连本地 SQLite,5 分钟搭一个能查数据的 AI 助手
jvm·人工智能·sqlite
TlSfoward16 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php