where子句基于来自另一个表的select语句

克里斯

我正在编写查询时需要帮助。我基本上想从一个表中选择所有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  

提前致谢

Shnugo

不知道您的数据是不可能给您答案的。看起来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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Laravel 5来自另一个表的where子句

mysql用where子句计算来自另一个表的行

基于另一个参数的条件where子句

mysql where 子句基于另一个查询

在Where子句中添加另一个表

使用NOT IN的另一个表中的WHERE子句

当where子句使用另一个表中的项目时,Mysqli Select查询

SQL - 来自另一个表的 WHERE 条件

SELECT where group 包含来自另一个表的值

带有WHERE子句的SELECT,该子句以字符串形式存储在另一个表中

MySQL SELECT与来自另一个表的数据

如何将这些查询与来自另一个父表的 where 子句合并为单个查询?

基于另一个表的MySQL SELECT SUM

根据时间戳从 POSTGRES 中删除行,这是来自另一个表的 SELECT 语句的结果

如何使用MySQL将SELECT列用作WHERE子句来获取另一个表的行数

如何使用另一个表中的 where 子句进行 select count(*) 返回空行?

从表中选择值的sql语句,该表的名称来自另一个表

基于SQL Server中另一个查询的Where子句

从表中选择where子句从另一个表中的数组

Sql从表中选择但使用另一个表值作为where子句

基于对另一个 IF 语句的响应的 IF 语句条件

Laravel DB :: raw读取where子句中的第二个参数而不是来自另一个表的动态列的字符串

另一个表中基于 SQL 更新语句的唯一值

使用 where 子句 mysql 将数据从一个表传输到另一个表

基于来自另一个表的查询的列的查询总和

如何在laravel中基于Auth用户显示来自另一个表的数据

如何在 SELECT 语句中将一个表中的语句替换为另一个表?

WHERE子句与Laravel中的另一个表有关系

MySQL WHERE子句链接到另一个表