2015-07-02 21 views
2
  • 我有有两种类型(A和B)的订单列表。
  • 每个帐户至少有一个A型订单。
  • 每个类型的多个订单可以存在于一个账户中。
  • 对于每一个客户,我需要知道该帐户的所有A类订单的最低order_date进行。

我应该在SQL,powerquery或powerpivot中执行此操作吗?
我宁愿在powerquery或powerpivot中计算它。 任何想法?如何返回每个帐户最小日期为特定订单类型

+0

如果你的数据是在数据库中,我会用它,这将是非常简单的SQL。你可以发布一些代码吗?你有什么试过的? –

回答

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 
+0

这是不是会返回整个表的最旧订单? –

+0

oops。由 –

+0

添加组应该做的窍门! –

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); 
0

假设:有一个[订购]之间和[帐户]表一对多的关系。

步骤:

  1. 创建[命令]之间和[帐户]表中的PowerPivot关系。确保箭头从[订单]指向[账户]。
  2. 创建表[订单类型],如果它不是已存在于PowerPivot的。在PowerPivot中的[Order]和[OrderType]表之间建立关系。再次确认箭头从[Order]指向[OrderType]。
  3. 表[在线订购]如下创建一个计算字段(未计算的列),

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

下面是说明如何在电力枢纽创建计算字段链接。 Link-1Link-2

  1. 创建Power Pivot报告。在列上放置[Order_Type]列,在[ROWS]上放置[Account_Name](或[Account_ID]或任何其他账户标识符)。最后,在VALUES上添加计算字段[最小日期](在步骤3中创建)。
0

功率查询可以在没有任何自定义的SQL很容易做到这一点。

筛选器只是一个命令:右键单击类型列和 文本过滤>等于一个小区。

然后右键点击帐户ID和GROUP BY的最低订购日期: 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" 
相关问题