Django中日期时间型字段进行年月日时分秒分组统计
作者:燃灯工作室 发布时间:2023-01-05 02:26:09
标签:Django,日期时间,字段统计
1.数据结构说明:
数据结构如下:modification字段为修改数据时间字段,格式为 年,月,日,时,分,秒。
案例场景为,根据modification字段,统计每个统计粒子,产生数据的条数。如需要统计2020年10月29日 每个小时段产生数据的条数。
要进行这种统计需要用到 Django的connection库。
统计年月日粒子用 date_trunc_sql,统计时分秒用 datetime_extract_sql
2.进行年月日粒子的统计
2.1 官方 date_trunc_sql 原型
def datetime_trunc_sql(self, lookup_type, field_name, tzname):
"""
Given a lookup_type of 'year', 'month', 'day', 'hour', 'minute', or
'second', return the SQL that truncates the given datetime field
field_name to a datetime object with only the given specificity.
"""
raise NotImplementedError('subclasses of BaseDatabaseOperations may require a datetime_trunc_sql() method')
解释说明下:
函数需要传入三个参数:
lookup_type:统计粒子(year->年,月->month,day->日,hour->时,minute->分,second->秒)
field_name:统计字段的名次
tzname:时区,在中国一般用的是东8区,传入8即可
2.2 年
from django.db import connection
from django.db.models import Count
# 'year', 'month', 'day', 'hour', 'minute', 'second'
select = {'year': connection.ops.datetime_trunc_sql('year', 'establish', 8)}
result = models.FocusOnRecord.objects.extra(select=select).values('year').annotate(number=Count('id')).order_by("year")[0:9]
for key in result:
print(key)
>>{'year': datetime.datetime(2019, 1, 1, 0, 0), 'number': 2168}
>>{'year': datetime.datetime(2020, 1, 1, 0, 0), 'number': 9369}
2.3 月
from django.db import connection
from django.db.models import Count
# 'year', 'month', 'day', 'hour', 'minute', 'second'
select = {'month': connection.ops.datetime_trunc_sql('month', 'establish', 8)}
result = models.FocusOnRecord.objects.extra(select=select).values('month').annotate(number=Count('id')).order_by("month")[0:9]
for key in result:
print(key)
>>{'month': datetime.datetime(2019, 6, 1, 0, 0), 'number': 8}
>>{'month': datetime.datetime(2019, 7, 1, 0, 0), 'number': 51}
>>{'month': datetime.datetime(2019, 8, 1, 0, 0), 'number': 118}
>>{'month': datetime.datetime(2019, 9, 1, 0, 0), 'number': 7}
>>{'month': datetime.datetime(2019, 10, 1, 0, 0), 'number': 731}
>>{'month': datetime.datetime(2019, 11, 1, 0, 0), 'number': 514}
>>{'month': datetime.datetime(2019, 12, 1, 0, 0), 'number': 739}
>>{'month': datetime.datetime(2020, 1, 1, 0, 0), 'number': 483}
>>{'month': datetime.datetime(2020, 2, 1, 0, 0), 'number': 921}
2.4 日
from django.db import connection
from django.db.models import Count
# 'year', 'month', 'day', 'hour', 'minute', 'second'
select = {'day': connection.ops.datetime_trunc_sql('day', 'establish', 8)}
result = models.FocusOnRecord.objects.extra(select=select).values('day').annotate(number=Count('id')).order_by("day")[0:9]
for key in result:
print(key)
>>{'day': datetime.datetime(2019, 6, 28, 0, 0), 'number': 1}
>>{'day': datetime.datetime(2019, 6, 29, 0, 0), 'number': 7}
>>{'day': datetime.datetime(2019, 7, 2, 0, 0), 'number': 1}
>>{'day': datetime.datetime(2019, 7, 11, 0, 0), 'number': 3}
>>{'day': datetime.datetime(2019, 7, 20, 0, 0), 'number': 32}
>>{'day': datetime.datetime(2019, 7, 21, 0, 0), 'number': 2}
>>{'day': datetime.datetime(2019, 7, 29, 0, 0), 'number': 3}
>>{'day': datetime.datetime(2019, 7, 31, 0, 0), 'number': 10}
>>{'day': datetime.datetime(2019, 8, 1, 0, 0), 'number': 20}
2.5 时
from django.db import connection
from django.db.models import Count
# 'year', 'month', 'day', 'hour', 'minute', 'second'
select = {'hour': connection.ops.datetime_trunc_sql('hour', 'establish', 8)}
result = models.FocusOnRecord.objects.extra(select=select).values('hour').annotate(number=Count('id')).order_by("hour")[0:9]
for key in result:
print(key)
>>{'hour': datetime.datetime(2019, 6, 28, 17, 0), 'number': 1}
>>{'hour': datetime.datetime(2019, 6, 29, 9, 0), 'number': 6}
>>{'hour': datetime.datetime(2019, 6, 29, 10, 0), 'number': 1}
>>{'hour': datetime.datetime(2019, 7, 2, 14, 0), 'number': 1}
>>{'hour': datetime.datetime(2019, 7, 11, 14, 0), 'number': 2}
>>{'hour': datetime.datetime(2019, 7, 11, 15, 0), 'number': 1}
>>{'hour': datetime.datetime(2019, 7, 20, 11, 0), 'number': 24}
>>{'hour': datetime.datetime(2019, 7, 20, 12, 0), 'number': 3}
>>{'hour': datetime.datetime(2019, 7, 20, 13, 0), 'number': 2}
2.6 分
from django.db import connection
from django.db.models import Count
# 'year', 'month', 'day', 'hour', 'minute', 'second'
select = {'minute': connection.ops.datetime_trunc_sql('minute', 'establish', 8)}
result = models.FocusOnRecord.objects.extra(select=select).values('minute').annotate(number=Count('id')).order_by("minute")[0:9]
for key in result:
print(key)
>>{'minute': datetime.datetime(2019, 6, 28, 17, 22), 'number': 1}
>>{'minute': datetime.datetime(2019, 6, 29, 9, 6), 'number': 4}
>>{'minute': datetime.datetime(2019, 6, 29, 9, 39), 'number': 1}
>>{'minute': datetime.datetime(2019, 6, 29, 9, 41), 'number': 1}
>>{'minute': datetime.datetime(2019, 6, 29, 10, 4), 'number': 1}
>>{'minute': datetime.datetime(2019, 7, 2, 14, 57), 'number': 1}
>>{'minute': datetime.datetime(2019, 7, 11, 14, 48), 'number': 1}
>>{'minute': datetime.datetime(2019, 7, 11, 14, 54), 'number': 1}
>>{'minute': datetime.datetime(2019, 7, 11, 15, 40), 'number': 1}
2.7 秒
from django.db import connection
from django.db.models import Count
# 'year', 'month', 'day', 'hour', 'minute', 'second'
select = {'second': connection.ops.datetime_trunc_sql('second', 'establish', 8)}
result = models.FocusOnRecord.objects.extra(select=select).values('second').annotate(number=Count('id')).order_by("second")[0:9]
for key in result:
print(key)
>>{'second': datetime.datetime(2019, 6, 28, 17, 22, 54), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 9, 6, 1), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 9, 6, 18), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 9, 6, 35), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 9, 6, 36), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 9, 39, 30), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 9, 41, 17), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 10, 4, 15), 'number': 1}
>>{'second': datetime.datetime(2019, 7, 2, 14, 57, 56), 'number': 1}
来源:https://blog.csdn.net/qq_22409661/article/details/109364457
0
投稿
猜你喜欢
- 如果你的Pycharm提示过期可以使用下面这个最新的Pycharm激活码,适用最新版的Pycharm 2020.2.3,老版本的Pychar
- 首先去官网下载两个架包链接如下:官网链接第一步:将两个架包解压到同一个database目录下。如截图所示:第二步:打开setup应用程序打开
- Bytes和Str的区别在Python3中,字符序列有两种类型:bytes和str。bytes类型是无符号的8位值(通常以ASCII码显式)
- 如下所示:import cv2import osimport numpy as nproot_path = "I:/Images/
- MySQL的ODBC接口实现是通过安装MyODBC驱动,这个驱动程序是跨平台的。如果在Linux等Unix体系操作系统下使用,需要先安装Io
- 你是否发现,在浩如烟海的应用程序堆里,具有漂亮图标和清爽名字的 App 更容易被用户喜爱。作为开发者,面对这自己的作品,能否自问一句:“从图
- PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序。在SQL中Oracle内建了一系列函数,这些函数都可被称
- Oracle数据库升级也并非简单的事,这篇文章对Oracle那点事做了较详细的介绍:Oracle数据库升级或数据迁移方法研究我还属于Orac
- 一、home页使用frametemplate/home.html<!DOCTYPE html><html lang=&qu
- 1.循环删除 #这个是我选中其中的一个分支进行右键清空操作时进行的处理for i in range(self.tree.currentIte
- 研究了几天Adodb.stream和XMLHTTP的应用,找了不少很有趣的教程,下面的代码是将一个远程的页面,图片地址保存到本地的实例。将代
- 这个弹出层的登录界面挺好看,很清爽所以转了过来给大家分享,要实现这个功能很简单:首先设计一个登录界面,使用css中的display=&quo
- 使用python的numpy模块实现逻辑回归模型的代码,供大家参考,具体内容如下使用了numpy模块,pandas模块,matplotlib
- 先看实际效果,现在时间2018.4.26使用python脚本按照年月日生成多级目录,创建的目录可以将系统生成的日志文件放入其中,方便查阅,代
- Yolov5如何更换BiFPN?第一步:修改common.py将如下代码添加到common.py文件中# BiFPN # 两个特征图add操
- <div> <a 
- 本文实例为大家分享了python matlibplot绘制3D图形的具体代码,供大家参考,具体内容如下1、散点图使用scatterfrom
- kmp算法KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特
- 译序:本文提到了一种很不错的实现跨浏览器圆角的解决方案,但是说的不够全面,前端观察最近将整理更多更全面的资源给大家,敬请期待。前一段时间,我
- 1.对于RGB三通道图片,直接用两层for循环的话,效率比较低2.可以先将RGB图片转为灰度图片,再利用numpy.where的广播机制统计