Sql MS access 2016中外部应用的等效命令
为了获得新的信息,我尝试与表关联,但似乎在MS access中没有外部应用程序。这是我的密码: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
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。我根据您的原始帖子重新创建了最小的表结构,该查询按预期工作。你能发布你的表结构和样本数据吗?我添加了样本数据