SQL-запрос за определенный период времени

Я новичок в 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 июня?

Обновлено:

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

SQL-запрос за определенный период времени

Вы можете сослаться на это: stackoverflow.com/questions/22506930/…

user1658435 01.05.2018 19:25

Я считаю, что PostgreSQL поддерживает пункт between. В основном ваше предложение where может быть where financial year between '2017-09-01' and '2017-03-31' и т. д.

wbrugato 01.05.2018 19:27

Немного необычно хранить месяц и год отдельно, что усложняет запрос. Вы можете показать нам, как выглядит стол?

jmelesky 01.05.2018 19:28

Я обновил вопрос снимком экрана таблицы.

Hannan 01.05.2018 19:40
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
4
548
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Другие вопросы по теме