我的数据库中有个人数据。我只需要选择每次观察一次,但这种选择需要最早出现。
有两个标识符可用于出现,年份和季度:
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
季度增加的一层让我失望。
感谢您的帮助!
答案 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;