【问题标题】:equivalent command of OUTER APPLY in MS access 2016MS access 2016 中 OUTER APPLY 的等效命令
【发布时间】:2017-02-03 17:37:16
【问题描述】:

我已尝试关联表格以获取新信息,但似乎 MS 访问中没有 OUTER APPLY。这是我的代码:

    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 ;

任何帮助都会受到欢迎

编辑:我认为使用 java 代码执行此操作会更容易(我已经考虑了算法)并且也更优化,但我没有正确的工具,如数据结构或正确的“命令”来处理数据库抛出 java (我是数学家)所以要在 java 中做到这一点,我需要更多的帮助。虽然我对这个解决方案持开放态度。 这是一个示例数据:

pred-predi_calculo-presi:

Id1 ID                       Paradero'horaPrediccion''pasadaReal'PREDICCION_NUEVA   PATENTE servicio
1   2016-12-13 11:36:50_T518    PA52    11:36:51       11:36:20      1579,242       CJRW-73    518
2   2016-12-13 11:36:50_T518    PA52    11:36:51       11:36:20      761,211        BJFB-79    518
3   2016-12-13 12:11:02_T518    PC475   12:17:53       12:16:34      1382,545       BFKC-47    518
4   2016-12-13 12:11:02_T518    PC475   12:17:53       12:16:34      695,283        CJRW-74    518
5   2016-12-13 12:11:03_T418    PC206   12:16:27       12:15:50      1210,033       ZN-6742    418
6   2016-12-13 12:11:03_T418    PC206   12:16:27       12:15:50      1407,741       ZN-5814    418
7   2016-12-13 13:16:41_T516    PD208   13:17:56       13:18:02      842,634        BJFY-17    516

snptc_histo:

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

【问题讨论】:

    标签: sql database ms-access-2016


    【解决方案1】:

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

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

    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
    

    Query2 - 使用 Query1 查找相关的 POSICIONBUS 值:

    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
    

    现在创建类似的查询,为每个 PATENTEBUS 值及其关联的 POSICIONBUS 值找到大于或等于 pasadaReal 的最小 horaConsulta 值:

    查询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。我根据您的原始帖子重新创建了最小的表结构,并且该查询按预期工作。你能发布你的表结构和示例数据吗?
    • 我添加了示例数据
    猜你喜欢
    • 2017-06-30
    • 2016-02-03
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    相关资源
    最近更新 更多