Определить период времени в базе данных для анализа - PullRequest
0 голосов
/ 08 мая 2018

Я хочу хранить временные ряды в базе данных. Значения этих временных рядов обычно определяются для определенного периода, например:

  • население страны в 2014, 2015, 2016 годах и т. Д.
  • количество домов в стране в 2014, 2015, 2016

Я хочу объединить данные этих varabiales, чтобы иметь возможность сделать некоторую статистику, поэтому жилье против населения. Это возможно только в том случае, если я проверю, чтобы периоды времени были точно такими же. Периоды, как правило, в год / квартал / месяц. Как лучше сохранить эти значения, чтобы я потом мог их сравнить?

В настоящее время я использую start_date (datetime) и end_date (datetime), который, очевидно, работает, но нуждается в хорошем графическом интерфейсе, чтобы предотвратить вход одного человека, например:

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)

1 Ответ

0 голосов
/ 08 мая 2018

Трудно ответить, так как у меня нет вашего полного кода (модели, виды и т. Д.). Но имейте в виду, что вы можете запросить поля django datetime, используя lt и gt следующим образом:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...