我正在使用 SQL,这是我遇到的情况
Table A
SubscriptionID | Club | Sum_Of_Billings_Of_All_Month | EventID
Table B:
Cost | EventID
表 A 在 EventID 上左连接表 B
(跟踪每个订阅的费用)
结果
SubscriptionID | Club | Sum_Of_Billings_Of_All_Month | EventID | Cost
我想将Sum_Of_Billings_Of_All_Month
分解为每天的账单。即对于每个订阅,我想要该月每天的账单明细。为此,我将分组
Sum_Of_Billings_Of_All_Month
而不是subscriptionID
。
后果
如果我按计费天数分组,加入后我将获得 subscriptionIDs
的重复项,并且 eventIDs
将在行中多次重复,然后计算成本倍数次也是如此。
我想要什么:
在同一查询中,我希望能够按
SubscriptionID
进行分组,以便我可以保留每行的唯一订阅及其费用。但另一个要求是我还想了解账单明细,以便在同一查询中计算盈亏平衡和其他指标
这是实际的示例数据
表A
idCustomerSubscription | ClubID | EventId | BillingDate| FinalRevenue
33562784 | 56180001| 5y6m600np1fg | 5/31/2017 | 512
表B
EventId |Cost
5y6m600np1fg |200
表 A 连接 B 在 eventId 上左连接(按 SubscriptionID 分组
idCustomerSubscription |ClubID |EventId |BillingDate| FinalRevenue | Cost
33562784 | 56180001 |5y6m600np1fg| 5/31/2017 | 512 |200
它达到了目的,因为每个订阅都有一个唯一的成本,但另一方面,这种查询不会给我账单日期的详细信息(我需要它来计算盈亏平衡)
表 A 连接 B 在 eventId 上左连接(按计费日期分组
idCustomerSubscription| ClubID |EventId | BillingDate| FinalRevenue |Cost
33562784 | 56180001| 5y6m600np1fg |5/30/2017 |510 |200
33562784 | 56180001| 5y6m600np1fg |5/31/2017 |2 |200
这将为我提供盈亏平衡所需的日期明细(30 日为 510,31 日为 2),但它会使成本重复(400 是成本,而不是 200)
<小时/>我想找到一个 SQL 魔法,可以在其中保留每行唯一订阅的数量,并以某种方式跟踪同一查询中每个订阅的计费日期(无需按日期分组,因为这会使行重复) )。是否可以 ?
也许以某种方式,当事件ID加入并按日期分组时,它不会重复成本并且每个事件ID只计算一个成本?
最佳答案
我希望您能通过以下查询得到您想要的结果。尝试通过mn(别名)表的操作修改您的组。
select mn.idCustomerSubscription,mn.ClubID,mn.EventId,mn.BillingDate,mn.FinalRevenue,sq.cost
from tableA Mn left join (select idCustomerSubscription,max(cost) cost, min(billingDate) billingDate from tableA a left join tableB b on a.eventid=b.eventid group by idCustomerSubscription) sq on mn.idCustomerSubscription=sq.idCustomerSubscription and mn.billingDate=sq.billingdate
group by mn.idCustomerSubscription,mn.ClubID,mn.EventId,mn.BillingDate
关于mysql - 对维度进行分组的 SQL 场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44290634/