2
  • 我有一份订单清单,有两种类型(A 和 B)。
  • 每个账户至少有一个 A 类订单。
  • 每个类型的多个订单可以存在于一个帐户上。
  • 对于每个帐户,我需要知道该帐户上所有 A 类订单的最小 Order_Date。

我应该在 SQL、powerquery 或 powerpivot 中执行此操作吗?
我更愿意在 powerquery 或 powerpivot 中计算它。有任何想法吗?

4

4 回答 4

2

只是对你的表结构做一些基本的假设。像这样的东西应该工作:

SELECT Account.Name, MIN(Order_date) FirstOrderDate
FROM Account LEFT OUTER JOIN Orders on Account.AccountId = Orders.OrderId
AND Orders.Type='A'
GROUP BY Account.Name
于 2015-07-02T16:41:39.933 回答
0
SELECT * 
FROM accounts,order
WHERE accounts.id = order.account_id and order.id in
(SELECT TOP 1 id FROM order
 WHERE type = "A"
 ORDER BY date);
于 2015-07-02T16:42:17.300 回答
0

假设: [Order] 和 [Account] 表之间存在一对多关系。

脚步:

  1. 在 PowerPivot 中创建 [Order] 和 [Account] 表之间的关系。确保箭头从 [Order] 指向 [Account]。
  2. 如果 PowerPivot 中尚不存在表 [OrderType],请创建该表。在 PowerPivot 中创建 [Order] 和 [OrderType] 表之间的关系。同样,确保箭头从 [Order] 指向 [OrderType]。
  3. 在表 [Order] 中创建一个计算字段(不是计算列),如下所示,

    [Minimum Date] = min(Order[Order_Date])
    

以下是解释如何在 Power Pivot 中创建计算字段的链接。链路 1 链路 2

  1. 创建 Power Pivot 报表。将 [Order_Type] 列放在 COLUMNS 上,将 [Account_Name](或 [Account_ID] 或任何其他帐户标识符)放在 ROWS 上。最后在 VALUES 上添加计算字段 [Minimum Date](在步骤 3 中创建)。
于 2015-07-03T18:21:31.027 回答
0

Power Query 无需任何自定义 SQL 即可轻松完成此操作。

过滤到仅 A 订单:右键单击类型列中的 A 单元格和文本过滤器 > 等于。

然后右键单击 AccountID 和 Group By 以获取最短订单日期: 通过...分组

一些硬编码的数据表明它有效:

let
    Source = Csv.Document("AccountID,Type,Order_Date
        1,A,1/4/13
        1,A,1/5/13
        1,B,1/1/13
        2,A,5/5/13"),
    #"Promoted Headers" = Table.PromoteHeaders(Source),
    TypedData = Table.TransformColumnTypes(#"Promoted Headers",{{"AccountID", Int64.Type}, {"Order_Date", type date}}),
    #"Filtered Rows" = Table.SelectRows(TypedData, each [Type] = "A"),
    #"Grouped Rows" = Table.Group(#"Filtered Rows", {"AccountID"}, {{"MinDate", each List.Min([Order_Date]), type date}})
in
    #"Grouped Rows"
于 2015-07-04T23:31:28.577 回答