Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询以返回工作不正常的业务年度之间的记录_Sql_Ms Access - Fatal编程技术网

Sql 查询以返回工作不正常的业务年度之间的记录

Sql 查询以返回工作不正常的业务年度之间的记录,sql,ms-access,Sql,Ms Access,我发现自己在工作年限之间查询记录时遇到了问题。 在这种情况下,业务年度总是从01/08/YYYY开始,并在31/07/YYYY结束。 例如: 对于2019-2020业务启动:2019年8月1日结束2020年7月31日 对于2020-2021业务启动:01/08/2020结束31/07/2021 当我今天打开数据库时,即使是新的业务年度,记录仍然会出现。 从新的业务年度开始,我的问题似乎就不起作用了。我有: 'To return records for the Current Business y

我发现自己在工作年限之间查询记录时遇到了问题。 在这种情况下,业务年度总是从
01/08/YYYY
开始,并在
31/07/YYYY
结束。 例如: 对于
2019-2020
业务启动:
2019年8月1日
结束
2020年7月31日
对于
2020-2021
业务启动:
01/08/2020
结束
31/07/2021

当我今天打开数据库时,即使是新的业务年度,记录仍然会出现。 从新的业务年度开始,我的问题似乎就不起作用了。我有:

'To return records for the Current Business year:
SELECT * FROM tblData WHERE (((DateDiff('m',[PaymentDate],DateSerial(Year(Date()),1,1))) Between -6 And 5));

'To return records for Previous Business year: 
SELECT * FROM tblData WHERE (((DateDiff('m',[PaymentDate],DateSerial(Year(Date())-1,1,1))) Between -6 And 5));

我的问题是,如何正确查询当前业务年度和上一个业务年度的记录?

上一个业务年度的记录:

select t.*
from tblData t
where year(dateadd('m', -8, PaymentDate)) = year(date()) - 1

逻辑是从日期中减去8个月,然后提取年份。

对于上一个业务年度:

select t.*
from tblData t
where year(dateadd('m', -8, PaymentDate)) = year(date()) - 1

逻辑是从日期中减去8个月,然后提取年份。

如果业务年度的开始和结束是常量(
yyyy/08/01
-
yyyy+1/07/31
),则尝试此操作-对于当前年度:

SELECT t.*
FROM tblData As t
WHERE t.PaymentDate BETWEEN DateSerial(Year(Date()), 8, 1) AND DateSerial(Year(Date())+1, 7, 31);
上一年度:

SELECT t.*
FROM tblData As t
WHERE t.PaymentDate BETWEEN DateSerial(Year(Date())-1, 8, 1) AND DateSerial(Year(Date()), 7, 31);
如果要将年份值传递给查询,请尝试以下操作:

--pass year to the query to grab data for business year yyyy/08/01 - yyyy+1/07-31

PARAMETERS BusinessYear SHORT;

SELECT t.*
FROM tblData As t
WHERE t.PaymentDate BETWEEN DateSerial(Year(BusinessYear), 8, 1) AND DateSerial(Year(BusinessYear)+1, 7, 31);

有关更多详细信息,请参阅:

如果业务年度的开始和结束是固定的(
yyyy/08/01
-
yyyy+1/07/31
),请尝试此方法-对于当前年度:

SELECT t.*
FROM tblData As t
WHERE t.PaymentDate BETWEEN DateSerial(Year(Date()), 8, 1) AND DateSerial(Year(Date())+1, 7, 31);
上一年度:

SELECT t.*
FROM tblData As t
WHERE t.PaymentDate BETWEEN DateSerial(Year(Date())-1, 8, 1) AND DateSerial(Year(Date()), 7, 31);
如果要将年份值传递给查询,请尝试以下操作:

--pass year to the query to grab data for business year yyyy/08/01 - yyyy+1/07-31

PARAMETERS BusinessYear SHORT;

SELECT t.*
FROM tblData As t
WHERE t.PaymentDate BETWEEN DateSerial(Year(BusinessYear), 8, 1) AND DateSerial(Year(BusinessYear)+1, 7, 31);

有关更多详细信息,请参见:

我这里肯定遗漏了一些内容,但是:
年(datediff('m',-8,PaymentDate))
为所有日期提供1903您可能指的是
日期添加
,而不是
日期差异
@ErikA。谢谢。@Gordon Linoff
01/08/2020
必须在当前业务年度出现。因此
Year(DateAdd('m',-7,PaymentDate))=Year(Date())-1
?@Fil。我认为这就是逻辑。有点不清楚哪一年是“当前”业务年度,因此可能会出现一个一个的混乱。我这里肯定遗漏了一些东西,但是:
year(datediff('m',-8,PaymentDate))
为所有日期提供1903您可能指的是
DateAdd
而不是
datediff
@ErikA。谢谢。@Gordon Linoff
01/08/2020
必须在当前业务年度出现。因此
Year(DateAdd('m',-7,PaymentDate))=Year(Date())-1
?@Fil。我认为这就是逻辑。有点不清楚哪一年是“当前”业务年度,因此可能会出现一个接一个的混乱。