我正在尝试对某些流量数据进行查询,但遇到了一些麻烦。我想提取每段路的最新数据,但事实证明这比预期的要复杂。
这是我正在使用的数据的示例:
S_ID | DATE | DIRECTION | AADT
1001 | 9/16/2013 | North | 700
1001 | 9/16/2013 | South | 600
1001 | 1/30/2011 | NULL | 1093
1001 | 2/31/2009 | NULL | 1091
1211 | 1/17/2012 | NULL | 945
1235 | 1/23/2014 | North | 500
1235 | 6/19/2014 | South | 350
1235 | 5/10/2011 | South | 354
1235 | 5/10/2011 | North | 399
1301 | 9/16/2013 | East | 700
1301 | 4/16/2012 | West | 600
1301 | 1/30/2014 | NULL | 1093
我对返回每个 SectionID 和方向的最新 AADT(年平均每日流量)值感兴趣。在上面的数据中,我希望返回以下值:
S_ID | DATE | DIRECTION | AADT
1001 | 9/16/2013 | North | 700
1001 | 9/16/2013 | South | 600
1211 | 1/17/2012 | NULL | 945
1235 | 1/23/2014 | North | 500
1235 | 6/19/2014 | South | 350
1301 | 1/30/2014 | NULL | 1093
我有以下代码:
SELECT a.*
INTO recent_data
FROM primarytrafficcountdata a
INNER
JOIN (
SELECT section_id,
direction,
MAX(date) AS maxdate
FROM primarytrafficcountdata
WHERE YEAR(date) <= 2014
AND YEAR(date) >= 2011
GROUP BY
section_id,
direction
) groupeda
ON (a.section_id = groupeda.section_id
AND a.direction = groupeda.direction
AND a.date = groupeda.maxdate)
OR (a.section_id = groupeda.section_id
AND a.direction IS NULL and groupeda.direction IS NULL
AND a.date = groupeda.maxdate)
;
但这返回:
S_ID | DATE | DIRECTION | AADT
1001 | 9/16/2013 | North | 700
1001 | 9/16/2013 | South | 600
1001 | 1/30/2011 | NULL | 1093
1211 | 1/17/2012 | NULL | 945
1235 | 1/23/2014 | North | 500
1235 | 6/19/2014 | South | 350
1301 | 9/16/2013 | East | 700
1301 | 4/16/2012 | West | 600
1301 | 1/30/2014 | NULL | 1093
这是我想要的最近日期,但我想消除北/南或东/西方向,并且仅在 NULL 方向更新时使用 NULL 方向,反之亦然,当北/南或东/ West 是最近的记录。
有谁知道我会怎么做?
我正在使用 Microsoft Access 2010。
尝试这个: