繁体   English   中英

SQL:在日期范围之间进行选择

[英]SQL: Selecting between date range

如果我在我想要的日期/时间字段上使用 Max(SampleDateTime) 或 Min(),我的查询将返回 1 个值,但如果我省略 Max 或 Min,它不返回任何值。 我想返回所有值,但我似乎无法弄清楚这一点。

我想要生产运行开始和停止时间之间的所有质量样品。

运行示例:

Select Max([SampleDateTime]) 
FROM [QualitySamples] AS [GoodSamples] 
WHERE [GoodSamples].[SampleDateTime] >= [ProductionRuns_tbl].[RunStartDate] 
    AND [GoodSamples].[SampleDateTime] <= [ProductionRuns_tbl].[RunEndDate]

ProductionRuns_tbl:
运行开始日期运行结束日期
1/1/2017 12 点 1/5/17 12 点
...

质量样品表:
ID 采样日期时间
1 1/1/2017 凌晨 2 点
2 1/1/2017 凌晨 3 点
...

这是完整的 SQL 代码:

SELECT ProductionRuns_tbl.RunName, ProductionRuns_tbl.RunStartDate, 
ProductionRuns_tbl.RunEndDate,
 (Select Max([SampleDateTime]) 
 FROM [QualitySamples] AS [GoodSamples] 
 WHERE [GoodSamples].[SampleDateTime] >= [ProductionRuns_tbl].[RunStartDate] 
 AND [GoodSamples].[SampleDateTime] <= [ProductionRuns_tbl].[RunEndDate])
AS RunSamples
FROM ProductionRuns_tbl
WHERE (((ProductionRuns_tbl.RunName)=[Forms]![Home]![RunName]));

尝试使用 join 代替:

SELECT ProductionRuns_tbl.RunName,
       ProductionRuns_tbl.RunStartDate, 
       ProductionRuns_tbl.RunEndDate,
        GoodSamples.SampleDateTime
FROM QualitySamples GoodSamples INNER JOIN ProductionRuns_tbl ON 
    GoodSamples.SampleDateTime >= ProductionRuns_tbl.RunStartDate AND 
    GoodSamples.SampleDateTime <= ProductionRuns_tbl.RunEndDate
WHERE ProductionRuns_tbl.RunName=[Forms]![Home]![RunName]

不要有WHEREMAXMIN 只要有SELECT查询。

Select [SampleDateTime]
FROM [QualitySamples] AS [GoodSamples] 

我现在冒着风险发帖,因为我不得不试着读懂你的想法(另外,我不知道这是否适用于 Access,但它适用于 SQL 服务器)

既然你想要所有的数据,这就是你要找的吗?

SELECT 
    ProductionRuns_tbl.RunName, 
    ProductionRuns_tbl.RunStartDate, 
    ProductionRuns_tbl.RunEndDate,
    [QualitySamples].[SampleDateTime]
FROM
    ProductionRuns_tbl
LEFT JOIN
    [QualitySamples]
ON
    [QualitySamples].[SampleDateTime] >= [ProductionRuns_tbl].[RunStartDate] 
    AND
    [QualitySamples].[SampleDateTime] <= [ProductionRuns_tbl].[RunEndDate]
WHERE 
    (((ProductionRuns_tbl.RunName)=[Forms]![Home]![RunName]));

这应该列出每个 SampleDateTime 重复的 RunName、Start 和 End 日期。 根据您更具体的要求,您可以从那里改进结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM