我正在编写查询时需要帮助。我基本上想从一个表中选择所有GRNID,但是它们必须在另一个表中的日期之间。
因此,我希望在ABSPeriodEndDate表中找到两个日期之间的所有GRN。为了找出between子句的开始日期,我需要找到MAX Period,然后减去-1和最大年份。
要查找between子句的结束日期,我需要同时找到最大期限和年份。但是我希望DateStamp列返回between子句的结果。
关于如何解决此问题的任何想法,似乎都无法使它按我的意愿工作。
我的查询如下:
SELECT tblGRNItem.GRNID
FROM tblGRNItem
INNER JOIN ABSPeriodEndDates ON tblGRNItem.DateCreated = ABSPeriodEndDates.DateStamp
WHERE tblGRNItem.DateCreated BETWEEN
SELECT ABSPeriodEndDates.DateStamp FROM ABSPeriodEndDates WHERE ABSPeriodEndDates.DateStamp = (SELECT MAX(ABSPeriodEndDates.Period)-1 FROM ABSPeriodEndDates)
AND ABSPeriodEndDates.Year = (SELECT MAX(ABSPeriodEndDates.Year)))
AND
SELECT ABSPeriodEndDates.DateStamp FROM ABSPeriodEndDates WHERE ABSPeriodEndDates.DateStamp = (SELECT MAX(ABSPeriodEndDates.Period) FROM ABSPeriodEndDates)
AND ABSPeriodEndDates.Year = (SELECT MAX(ABSPeriodEndDates.Year)))
注意:ABSPeriodEndDates中的DataStamp是datetime2数据类型,而tblGRNItem中的DateCreated是datetime数据类型。
示例数据:
tblGRNItem ABSPeriodEndDates
GRNID || DateCreated Year || Period || DateStamp
1 || 01/01/2015 2015 || 1 || 01/01/2015 00:00:01
2 || 05/01/2015 2015 || 1 || 01/01/2015 00:00:01
3 || 06/02/2015 2015 || 2 || 01/02/2015 00:00:01
4 || 09/02/2015 2015 || 2 || 01/02/2015 00:00:01
5 || 19/02/2015 2015 || 2 || 01/02/2015 00:00:01
6 || 16/03/2015 2015 || 3 || 01/03/2015 00:00:01
因此,因为最大周期减去一是2,最大周期是3,所以我想牢记从日期戳01/02/2015 00:00:01到01/03/2015 00:00:01之间的tblGRNItem获取所有GRNID数据类型是tblGRNitem中的datetime和ABSPeriodEndDates中的datetime2,因此结果应为:
3 || 06/02/2015
4 || 09/02/2015
5 || 19/02/2015
提前致谢
不知道您的数据是不可能给您答案的。看起来ABSPeriodEndDates和tblGrnItem之间没有任何联系。您只想找到最新周期的范围,对吗?
你可以做这样的事情
WITH MaxDat AS
(
SELECT MAX(DateStamp) AS MaxDatFound
FROM ABSPeriodEndDates
)
,MinDat AS
(
SELECT TOP 1 DateStamp AS MinDatFound
FROM ABSPeriodEndDates
WHERE DateStamp<(SELECT MaxDatFound FROM MaxDat)
ORDER BY DateStamp DESC
)
SELECT *
FROM tblGRNItem
WHERE DateCreated BETWEEN (SELECT MinDatFound FROM MinDat) AND (SELECT MaxDatFound FROM MaxDat)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句