首页 > 解决方案 > 在数据库中定义时间段以进行分析

问题描述

我想将时间序列存储在数据库中。这些时间序列的值通常是针对某个时期定义的,例如:

我想结合这些变量的数据来做一些统计,比如住房与人口。这只有在我确保时间段完全相同的情况下才有可能。这些期间通常以每年/季度/月为基础。如何最好地存储这些值以便我以后可以比较它们?

我目前使用 start_date (datetime) 和 end_date (datetime),这显然有效,但需要一个好的 GUI 来防止一个人进入,例如:

start = 1-1-2016 & end = 31-12=2016

而另一个人会进入:

start = 1-1-2016 & end = 1-1=2017

我认为保持与用户定义时间段的自由是一个好主意,但帮助他们定义正确的事情。你会如何建议这样做?

顺便说一句:我使用 Django,所以我当前的模型有以下两个字段:

period_start = models.DateField(null=False)
period_end = models.DateField(null=False)

编辑 8-5-2018 10:32:添加了一些有关存储数据 的信息 一些额外信息以增加清晰度:我将数据存储在两个表中:(1)变量定义和(2)值。变量定义大致如下:

class VarDef(models.Model):
    name = models.CharField(max_length=2000, null=False)
    unit = models.CharField(max_length=20, null=False)
    desc = models.CharField(max_length=2000, blank=True, null=True)


class VarValue(models.Model):
    value = models.DecimalField(max_digits=60, decimal_places=20, null=False)
    var = models.ForeignKey(VarDef, on_delete=models.CASCADE, null=False,
                             related_name='var_values')
    period_start = models.DateField(null=False)
    period_end = models.DateField(null=False)

标签: djangodatetime

解决方案


很难回答,因为我没有您的完整代码(模型、视图等)。但请记住,您可以像这样使用和查询 djangodatetime字段:ltgt

import datetime

# user input from your view, I hardcoded just for the sake of the example
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)

house_data = HousesData.objects.filter(period_start__gt=start_date, period_end__lt=end_date)).all()
country_data = CountryData.objects.filter(period_start__gt=start_date, period_end__lt=end_date)).all()

# Do the rest of your calculation

推荐阅读