我对SQL完全陌生,想要运行查询,我希望从9月16日到3月17日获得收入 。我试图写这样的查询:
SELECT revenue
FROM myapp_financialdata
WHERE financial_year = 2016
AND financial_month = 9
AND financial_year = 2017
AND financial_month = 3
我知道我做错了。任何人都可以帮我一些查询,我不仅可以动态使用上述期间,还可以使用从1月17日到6月17日这样的内容吗?
更新
以下是表格的截图:
答案 0 :(得分:3)
我们假设您的日期列名为'financial_date',以下是您的查询应该如何:
SELECT revenue,financial_date FROM myapp_financialdata
WHERE financial_date between '2016-09-01' and '2017-03-31'
(BETWEEN PostgreSQL)参考:http://www.postgresqltutorial.com/postgresql-between/
答案 1 :(得分:3)
正如其他人所建议的那样,通常的答案是使用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年1月至6月为您提供所有内容。
如果这段时间跨越两年,看起来像是:
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年4月到2017年6月之间的总收入。
希望有所帮助。
答案 2 :(得分:2)
如果年份和月份分为两列,您可以写:
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';
答案 3 :(得分:1)
试试这个:
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')