在数据库中定义时间段以进行分析

时间:2018-05-08 07:36:11

标签: django datetime

我想将时间序列存储在数据库中。这些时间序列的值通常定义一段时间,例如:

  • 2014年,2015年,2016年等国家人口
  • 2014年,2015年,2016年的国家数量

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

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

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

而另一个人会进入:

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

我认为保持与用户定义句点的自由是一个好主意,但有助于他们定义正确的事物。你会怎么建议这样做?

BTW:我使用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)

1 个答案:

答案 0 :(得分:0)

由于我没有完整的代码(模型,视图等),因此很难回答。但请注意,您可以使用ltgt来查询django datetime字段,如下所示:

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