是否可以在SQL中将SELECT函数与LAST函数结合使用?

时间:2019-03-27 20:32:20

标签: sql ms-access

需要帮助弄清楚如何使用LAST函数将数据库查询范围缩小到具有特定过滤器的最新条目。

我正在使用MS Access来测试查询。

问题:我正在尝试通过一个简单的查询来过滤数据库,以将数据范围缩小到仅匹配特定WorkOrderRun的项目。

代码:

SELECT *
FROM DataPoints
WHERE (((DataPoints.[WorkOrder])=[WO2]) AND ((DataPoints.[RunNumber])=6))

上面的代码效果很好。接下来,我只想从最新条目中获取数据。我相信我需要合并LAST()函数,但不知道如何实现。

想法?我会很感激。谢谢。

Sample data snippet

3 个答案:

答案 0 :(得分:2)

您可以按日期和时间字段对结果进行排序,并仅选择前1个,例如:

select top 1 t.*
from datapoints t
where t.workorder = [WO2] and t.runnumber = 6
order by t.rundate desc, t.runtime desc

答案 1 :(得分:1)

您可以使用具有NOT EXISTS条件的相关子查询来仅过滤最新记录,例如:

SELECT dp.*
FROM DataPoints AS dp
WHERE (
    ((dp.[WorkOrder])=[WO2]) 
    AND ((dp.[RunNumber])=6)
    AND (
        NOT EXISTS(
            SELECT 1 
            FROM DataPoints AS dp1
            WHERE (
                ((dp1.[WorkOrder]) = (dp.[WorkOrder])) 
                AND ((dp1.[RunNumber]) = (dp1.[RunNumber]))
                AND ((dp1.[RunTime]) > (dp.[RunTime]))
            )
        )
    )
)

答案 2 :(得分:1)

如果您能够通过使用LAST()函数来包含用于识别记录的唯一键,那么它将非常容易。

我提供的示例说明了如果您仍然希望使用LAST()函数,该如何做。为了使我的示例正常工作,我在您的DataPoints表中创建了一个主键,并将其命名为PrimaryWO_Key

第一:创建查询以获取最后插入/创建的记录的唯一键。在我的示例中,我将此查询命名为Last_WorkOrderPrimaryKey

第二:创建结果查询以使用我们刚刚创建的查询。我将此查询命名为“最后工作订单记录”。

在Access中保存的任何查询都可以当作“实际”表使用。

enter image description here

enter image description here

相关问题