MS Access:选择组中的第一个匹配项

时间:2014-12-12 16:26:38

标签: sql database ms-access

我的数据库中有个人数据。我只需要选择每次观察一次,但这种选择需要最早出现。

有两个标识符可用于出现,年份和季度:

 CustID     | OrderYear | Quarter 
 0001       |  2012     |   3
 0001       |  2012     |   4
 0001       |  2013     |   1
 0002       |  2012     |   3
 0002       |  2012     |   4
 0003       |  2013     |   1

我需要select语句来抓取它,以便输出:

 CustID     | OrderYear | Quarter 
 0001       |  2012     |   3
 0002       |  2012     |   3
 0003       |  2013     |   1

因此,观察按客户ID分组,然后按订单年分组,然后按季度分组。这有意义吗?如果没有季度,我可以很好地完成它,但我需要四分之一才能进行分析的下一步,当我这样做时,我的技术失败了。

没有季度,我可以在select语句中使用First(orderYear),按CustID分组,它可以正常工作(数据集按CustID排序,然后是Year,然后是Quarter按升序排序,所以在这种情况下,First()抓住最早的事件

SELECT CustID, First(OrderYear)
FROM Table1
GROUP BY CustID

季度增加的一层让我失望。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

使用GROUP BY确定每个 CustID 的最小 OrderYear 。然后将该查询连接回主表,以将数据集仅过滤到那些组合。最后,您可以找到每个 OrderYear / CustID 组合的最小 Quarter

SELECT t.CustID, t.OrderYear, Min(t.Quarter)
FROM
    Table1 AS t
    INNER JOIN
    (
        SELECT CustID, Min(OrderYear) AS MinOfOrderYear
        FROM Table1
        GROUP BY CustID
    ) AS sub
    ON
           t.CustID = sub.CustID
       AND t.OrderYear = sub.MinOfOrderYear
GROUP BY t.CustID, t.OrderYear;