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
投稿
猜你喜欢
- 首先,创建一个DataFrame格式数据作为举例数据。# 创建一个DataFrame格式数据data = {'a': [
- 提到分发请求,相信大多数人首先会想到Nginx,Nginx作为一种多功能服务器,不仅提供了反向代理隐藏主机ip的能力,还拥有简单的缓存加速功
- 博主PyQt5新手,最近在写一个可视化展示界面,第一个遇到的坑就是布局管理。其实可以不用相对布局,直接用QtDesigner进行傻瓜式的拖控
- 1.字符串转二进制数组 string content="这是做个测试!"; System.Text.UnicodeEnc
- 层的八条定律当然,这些并非真正的定律,而只是一些有益的忠告,使你免陷于使用层时可能的困顿中。原来有九条定律的,我们精简掉一条,还有下面的八条
- 经常使用到有关数据库的操作。包括连接代码、SQL命令等等,又不曾刻意去记忆它们(我本人是不愿意去记这东东),所以常常在用到的时候又去查书本,
- 前言jieba 基于Python的中文分词工具,安装使用非常方便,直接pip即可,2/3都可以,功能强悍,十分推荐。中文分词(Chinese
- 本文实例讲述了python基于pygame实现响应游戏中事件的方法。分享给大家供大家参考,具体如下:先看一下我做的demo效果:当玩家按下键
- 1,效果图 2,实现方法const columns = [ { title: '序号',  
- 要在用户浏览器上安装cookie,HTTP服务器向HTTP响应添加类似以下内容的HTTP报头:Set-Cookie:session=8345
- var obj = document.getElementById("testSelect"); //定位idvar i
- 用Python实现点对点的聊天,2个程序,一个是client.py,一个是server.py,通过本机地址127.0.0.1连接进行通信,利
- 本文向大家分享23种JavaScript提高执行效率的小技巧、最佳实践等非常实用的内容。当然JavaScript的实用技巧不止这些,还有很多
- 每种语言都有自己的独到之处,或奇特的语法,或不常见的函数,或非标准的执行方式。因此,不论新丁还是老手,看着某个特性会突然醉了。文中总结了10
- css实现的圆角矩形的方式很多,但要追求灵活型,上面的结构简单,看起来爽一点注意css所用的图片路径,已修改兼容ie6 ie7 ff ,IE
- 本文实例为大家分享了js选项卡切换效果的具体实现代码,供大家参考,具体内容如下<!DOCTYPE html><html&g
- 实例如下所示:>>>from compiler.ast import flatten>>>Xmatrix
- 切片从list或tuple中取部分元素。list = [1, 2, 3, 4]list[0 : 3] # [1, 2, 3]list[-2
- 前言第一次看go基础语法的时候,用使用到了defer。但是一直不知道它到底是什么,有什么用途。这几天通过查询、学习。算是对defer有了一点
- 本文实例讲述了python实现连接mongodb的方法。分享给大家供大家参考。具体分析如下:通过pymongo可以很容易的链接到mongod