SQL函数中的MAX函数失败

时间:2016-08-17 21:20:00

标签: sql ms-access-2010

我正在尝试从tbl_Trim_history.Comp中获取tom_temp.Begin_Time之前的最近日期。我正在使用的SQL是:

SELECT
    Tom_Temp2.feeder,
    Tom_Temp.CauseType,
    Tom_Temp.RootCause,
    Tom_Temp.Storm_Name_Thunder,
    Tom_Temp.DeviceGroup,
    tbl_Trim_History.[COMP],
    Tom_Temp.[Begin_Time]

FROM Tom_Temp2

LEFT JOIN (Tom_Temp
LEFT JOIN tbl_Trim_History
    ON Tom_Temp.feeder = tbl_Trim_History.CIRCUIT_ID)

    ON Tom_Temp2.feeder = Tom_Temp.feeder

WHERE (((tbl_Trim_History.[COMP]) < [Tom_Temp].[Begin_Time]));

我很难弄清楚我需要在这个语句中放置我的max()函数,以确保我不会回到tom_temp之前发生的每一个tbl_Trim_history。[COMP]。 Begin_Time日期。我只想要tbl_Trim_history的最新日期。[COMP]发生在tom_temp.begin_Time之前....不是每个历史日期记录。

你们可以给我的任何帮助都会很棒,因为我不断回头,我能说的不是我正在寻找/期待的东西。

谢谢大家。我很感激反馈。

根据以下回复进行修改:

由于角色限制,我刚刚为你们编辑了主帖。

我无法真正发布数据,因为它有点保密,所以我能做的最好的就是给你一个例子。此外,这是访问,但我的背景是MySQL。对于标签很抱歉,我不确定是什么类似的,因为访问标签似乎不适合这个问题。

收到的数据约有168条记录。有人指出这里有一个内连接,但我想表明我实际上是在使用3个不同的表。

1表包含我的馈线,

另一个包含我使用第一个表格中包含的所有馈线加入的所有中断的列表

然后我有另一张表,其中包含每个进纸器的所有修剪历史记录。停机表连接到装饰表。

当我运行上面的查询时,我得到这样的数据

feeder    |   comp      |       Begin_time
___________________________________________

123456  |   10/4/2012   |    3/3/2016 11:26:00AM
123456  |   10/17/2015  |    3/3/2016 11:26:00AM

456789  |    6/28/2008  |    9/20/2013 10:05AM
456789  |    12/1/2012  |    9/20/2013 10:05AM
456789  |    7/3/2013   |    9/20/2013  10:05AM

我想要的是这样的数据:

 feeder    |   comp      |       Begin_time
    ___________________________________________

    123456  |   10/17/2015  |    3/3/2016 11:26:00AM

    456789  |    7/3/2013   |    9/20/2013  10:05AM

其中comp日期最接近于Begin_time日期之前的日期/时间。

我尝试了这个查询:

SELECT Tom_Temp2.feeder, Tom_Temp.CauseType, Tom_Temp.RootCause, Tom_Temp.Storm_Name_Thunder, Tom_Temp.DeviceGroup, Max(tbl_Trim_History.COMP) AS MaxOfCOMP, Tom_Temp.Begin_Time

FROM Tom_Temp2 

LEFT JOIN (Tom_Temp LEFT JOIN tbl_Trim_History ON Tom_Temp.feeder = tbl_Trim_History.CIRCUIT_ID) ON Tom_Temp2.feeder = Tom_Temp.feeder

GROUP BY Tom_Temp2.feeder, Tom_Temp.CauseType, Tom_Temp.RootCause, Tom_Temp.Storm_Name_Thunder, Tom_Temp.DeviceGroup, Tom_Temp.Begin_Time
HAVING (((Max(tbl_Trim_History.COMP))<[Tom_Temp].[Begin_Time]));

但是在我第一次查询中找回的168条记录中,我只收到了20条记录。

我知道这是错误的原因是因为168和20的集合之间缺少一些记录。例如,我将缺少馈线456789的任何记录。但是,我 知道 应该返回此记录,因为它在我的应该返回的馈送器表中(Tom_Temp2)。

手动删除不需要的数据行后,我知道我应该获得85的记录数。因此,我最近尝试使用Max查询的方法已经过时了。

0 个答案:

没有答案