SQL-запрос для определенного периода времени - PullRequest
0 голосов
/ 01 мая 2018

Я совершенно новичок в SQL и хочу выполнить запрос, по которому я хочу получать доход с 16 сентября по 17 марта . Я пытаюсь написать запрос, подобный этому:

SELECT revenue 
  FROM myapp_financialdata
 WHERE financial_year  = 2016 
   AND financial_month = 9
   AND financial_year  = 2017
   AND financial_month = 3

Я знаю, что я все делаю неправильно. Может кто-нибудь, пожалуйста, помогите мне для некоторого запроса, который я могу использовать динамически не только для указанного периода, но и для чего-то вроде с 17 января по 17 июня ?

UPDATE:

Вот скриншот таблицы:

enter image description here

Ответы [ 4 ]

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

попробуйте это:

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')
0 голосов
/ 01 мая 2018

Если год и месяц разделены на две колонки, вы можете написать:

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';
0 голосов
/ 01 мая 2018

Как и предполагали другие, обычный ответ заключается в использовании оператора 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 года.

Надеюсь, это поможет.

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

Давайте предположим, что ваш столбец даты называется '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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...