Sql MS access 2016中外部应用的等效命令

Sql MS access 2016中外部应用的等效命令,sql,database,ms-access-2016,Sql,Database,Ms Access 2016,为了获得新的信息,我尝试与表关联,但似乎在MS access中没有外部应用程序。这是我的密码: SELECT * FROM [pred-predi_calculo-presi] OUTER APPLY ( SELECT TOP 1 [snptc_histo].POSICIONBUS FROM [snptc_histo] WHERE [snptc_histo].PATENTEBUS = [pred-predi_calculo-presi].PATENTE

为了获得新的信息,我尝试与表关联,但似乎在MS access中没有外部应用程序。这是我的密码:

    SELECT *
FROM [pred-predi_calculo-presi]
  OUTER APPLY
    ( SELECT TOP 1 [snptc_histo].POSICIONBUS
      FROM [snptc_histo]
      WHERE [snptc_histo].PATENTEBUS = [pred-predi_calculo-presi].PATENTE
        AND [snptc_histo].horaConsulta < [pred-predi_calculo-presi].'pasadaReal'
      ORDER BY [snptc_histo].horaConsulta DESC
    ) AS p
  OUTER APPLY
    ( SELECT TOP 1 [snptc_histo].POSICIONBUS
      FROM [snptc_histo]
      WHERE [snptc_histo].PATENTEBUS = [pred-predi_calculo-presi].PATENTE
        AND [snptc_histo].horaConsulta >= [pred-predi_calculo-presi].'pasadaReal'
      ORDER BY [snptc_histo].horaConsulta ASC
    ) AS n ;
snptc_历史:

PATENTEBUS  POSICIONBUS horaConsulta
WA-9114     0           17:15:52
CJRW-83     3,64        17:15:52
ZN-3967     0,26        17:15:50
BJFV-89     11,06       17:15:51
BJFS-92     32,866      17:15:51
FLXJ-30     19,74       17:15:51
BJFR-52     9,55        17:15:50
CJRW-52     24,67       17:15:50
BJFR-94     14,75       17:15:49
CJRT-63     16,02       17:15:49

在Access中,这不是最简单的操作,但请尝试以下操作

Query1-中间查询,查找每个PatentBus值小于pasadaReal的最大horaConsulta值:

SELECT s.PATENTEBUS, MAX(horaConsulta) AS MaxHoraConsulta
FROM [snptc_histo] AS s 
INNER JOIN [pred-predi_calculo-presi] AS p ON s.PATENTEBUS = p.PATENTE
WHERE s.horaConsulta < p.pasadaReal
GROUP BY s.PATENTEBUS
SELECT s.PATENTEBUS, s.POSICIONBUS
FROM [snptc_histo] AS s 
INNER JOIN Query1 AS q ON s.PATENTEBUS = q.PATENTEBUS AND s.horaConsulta = q.MaxHoraConsulta
现在创建类似的查询,以查找每个PatentBus值大于或等于pasadaReal的min Horaconsorta值及其关联的PosiConbus值:

SELECT s.PATENTEBUS, MAX(horaConsulta) AS MaxHoraConsulta
FROM [snptc_histo] AS s 
INNER JOIN [pred-predi_calculo-presi] AS p ON s.PATENTEBUS = p.PATENTE
WHERE s.horaConsulta < p.pasadaReal
GROUP BY s.PATENTEBUS
SELECT s.PATENTEBUS, s.POSICIONBUS
FROM [snptc_histo] AS s 
INNER JOIN Query1 AS q ON s.PATENTEBUS = q.PATENTEBUS AND s.horaConsulta = q.MaxHoraConsulta
问题3

SELECT s.PATENTEBUS, MIN(horaConsulta) AS MinHoraConsulta
FROM [snptc_histo] AS s 
INNER JOIN [pred-predi_calculo-presi] AS p ON s.PATENTEBUS = p.PATENTE
WHERE s.horaConsulta >= p.pasadaReal
GROUP BY s.PATENTEBUS
问题4

SELECT s.PATENTEBUS, s.POSICIONBUS
FROM [snptc_histo] AS s 
INNER JOIN Query3 AS q ON s.PATENTEBUS = q.PATENTEBUS AND s.horaConsulta = q.MinHoraConsulta
现在,您的最终查询变成:

SELECT p.*, q2.POSICIONBUS, q4.POSICIONBUS
FROM ([pred-predi_calculo-presi] AS p
LEFT JOIN Query2 AS q2 ON p.PATENTE = q2.PATENTEBUS)
LEFT JOIN Query4 AS q4 ON p.PATENTE = q4.PATENTEBUS

Query1不起作用;看起来像“WHERE s.horaConsulta[pred-predi_calculo-presi]。'pasadaReal'?我假设这应该写成
[pred-predi_calculo-presi].[pasadaReal]
,换句话说,我假设
pasadaReal
[pred-predi_calculo-presi]
表中的一列。这是错误的吗?是的,但正如我所说的,WHERE作用于SELECT,所以它看到它正在写入的行中的[snptc_histo]列,而不是其他表中的列,因为它不知道要查看哪一行WHERE也可以作用于JOIN。我根据您的原始帖子重新创建了最小的表结构,该查询按预期工作。你能发布你的表结构和样本数据吗?我添加了样本数据