首页 > 解决方案 > 访问查询 - 使用条件获取最新日期

问题描述

我在表“tbldata”中有以下数据

Equipment Type  Starting date   Ending Date
420-413     T1     2019-06-10     2019-06-15  
402-483     T2     2019-06-14     2019-06-29  
446-439     T4     2019-07-20     2019-07-30  
420-413     T3     2019-12-08     2019-12-12  
428-421     T2     2019-08-01     2019-09-01  
420-413     T2     2019-09-08     2019-10-04

我进行了查询“qryunpair”以取消配对设备中的所有匹配结果:

UnpairEquipment
402
413
420
421
428
439
446
483

我正在尝试为每种设备的每种类型设置“结束日期”的最新日期。
我有以下代码:

SELECT
    qryinspection.UnpairEquipment AS Equipment,
    Max(t.[Ending Date]) AS T1,
    Max(t.[Ending Date]) AS T2,
    Max(t.[Ending Date]) AS T3,
    Max(t.[Ending Date]) AS T4
FROM
    qryunpair AS qryinspection,
    tbldata AS t
GROUP BY qryinspection.UnpairEquipment;

这几乎是我想要实现的目标,但它没有考虑类型,我为每种设备/类型得到相同的日期:

 Equipment   T1        T2             T3           T4
 402    2019-06-29  2019-06-29  2019-06-29  2019-06-29
 413    2019-12-12  2019-12-12  2019-12-12  2019-12-12
 420    2019-12-12  2019-12-12  2019-12-12  2019-12-12
 421    2019-09-01  2019-09-01  2019-09-01  2019-09-01
 428    2019-09-01  2019-09-01  2019-09-01  2019-09-01
 439    2019-07-30  2019-07-30  2019-07-30  2019-07-30
 446    2019-07-30  2019-07-30  2019-07-30  2019-07-30
 483    2019-06-29  2019-06-29  2019-06-29  2019-06-29

有解决办法吗?

标签: sqlms-accesssyntax

解决方案


您可以使用条件聚合,例如:

select 
    q.unpairequipment as Equipment, 
    max(iif(t.type='T1',[ending date],null)) as T1,
    max(iif(t.type='T2',[ending date],null)) as T2,
    max(iif(t.type='T3',[ending date],null)) as T3,
    max(iif(t.type='T4',[ending date],null)) as T4
from 
    qryunpair as q inner join tbldata as t on '-' + t.equipment + '-' like '*-' +  q.unpairequipment + '-*'
group by 
    q.unpairequipment

以上内容基于@forpas 对您最后一个问题的回答


推荐阅读