Как и предполагали другие, обычный ответ заключается в использовании оператора BETWEEN
- поддержка postgresql для дат и времени довольно тщательна, и это будет работать в большинстве ситуаций.
Этот запрос будет выглядеть примерно так:
SELECT revenue FROM myapp_financialdata
WHERE financialdate BETWEEN '2016-09-01' AND '2017-03-01';
И вернет все строки, соответствующие этим датам. Если вы предпочитаете получить одно число (скажем, общую сумму выручки), вы должны использовать SELECT sum(revenue) FROM ...
.
Но если ваша таблица хранит год и месяц в отдельных столбцах, это более сложно.
Если обе даты в одном и том же году, это довольно просто:
SELECT sum(revenue) FROM myapp_financialdata
WHERE
financial_year = 2017
AND (financial_month BETWEEN 1 AND 6);
Это дает вам все с января по июнь 2017 года.
Если период охватывает два года, он выглядит следующим образом:
SELECT sum(revenue) from myapp_financialdata
WHERE
(financial_year = 2016 AND
financial_month >= 9)
OR
(financial_year = 2017 AND
financial_month <= 3);
Как видите, это сложнее, чем когда есть один столбец date
. Это немного сложнее, если вы хотите охватить несколько лет:
SELECT sum(revenue) from myapp_financialdata
WHERE
(financial_year = 2012 AND
financial_month >= 4)
OR
(financial_year BETWEEN 2013 AND 2016)
OR
(financial_year = 2017 AND
financial_month <= 6);
Получает общий доход за период с апреля 2012 года по июнь 2017 года.
Надеюсь, это поможет.