Я новичок в SQL и хочу выполнить запрос, в котором я хочу получить доход с 16 сен-17 по 17 мар. Я пытаюсь написать такой запрос:
SELECT revenue
FROM myapp_financialdata
WHERE financial_year = 2016
AND financial_month = 9
AND financial_year = 2017
AND financial_month = 3
Я знаю, что делаю это совершенно неправильно. Может ли кто-нибудь помочь мне с некоторым запросом, который я могу динамически использовать не только для указанного выше периода, но и для чего-то вроде с 17 января по 17 июня?
Обновлено:
Вот скриншот таблицы:
Я считаю, что PostgreSQL поддерживает пункт between. В основном ваше предложение where может быть where financial year between '2017-09-01' and '2017-03-31' и т. д.
Немного необычно хранить месяц и год отдельно, что усложняет запрос. Вы можете показать нам, как выглядит стол?
Я обновил вопрос снимком экрана таблицы.


Предположим, ваш столбец даты называется financial_date, вот как должен выглядеть ваш запрос:
SELECT revenue,financial_date FROM myapp_financialdata
WHERE financial_date between '2016-09-01' and '2017-03-31'
(МЕЖДУ PostgreSQL) Ссылка: http://www.postgresqltutorial.com/postgresql-between/
Если год и месяц разделены на две колонки, вы можете написать:
select revenue
from myapp_financialdata
where (financial_year = 2016 and financial_month >= 9)
or (financial_year = 2017 and financial_month <= 3);
Если год и месяц указаны в одном столбце даты, вы можете написать:
select revenue
from myapp_financialdata
where financial_date between '2016-09-01' and '2017-03-31';
Как предлагали другие, обычный ответ - использовать оператор 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 года.
Надеюсь, это поможет.
попробуй это:
SELECT revenue
FROM myapp_financialdata
WHERE to_date(to_char(financial_year)||to_char(financial_month),'RRRRMM') BETWEEN to_date('2016-09-01','RRRR-MM-DD') AND to_date('2017-03-31','RRRR-MM-DD')
Вы можете сослаться на это: stackoverflow.com/questions/22506930/…