【问题标题】:google big query谷歌大查询
【发布时间】:2019-02-27 19:07:50
【问题描述】:

假设有一个数据库有两个表,即 Loans 和 Billpayment。

对于 Loans 表,我有以下列:

loanId,
clientId(primary key),
DisbursementDate,
applicationDate,
approvalDate,
loanNumber,
loanAmount,
interestRate

账单支付表列包括:

billId(primary),
customerId(foreign),
billAmount,
payment_status[success/fail],
billDate

如何获取在 2018 年 3 月支付账单的客户,并显示在 2018 年剩余月份至少支付过一次账单的客户数量,以及在此基础上,显示是否账单支付客户2018年内是否有贷款?

【问题讨论】:

  • 贷款表的ClientId是billpayment表的CustomerId?
  • 那是我的假设,看不出它会怎样。
  • 是的..它是@SafiUllah

标签: mysql google-bigquery


【解决方案1】:

好的,让我们解决这个问题。我没有对此进行任何测试,也没有对其进行适当优化,但希望它会有所帮助。

要列出 2018 年 3 月的付款,假设我们不在乎是否成功,请执行 where:

select * from billpayment
where month(billDate) = 3 and year(billDate) = 2018

要在上面包含相关的客户信息,请加入:

select * from billpayment
join loans on customerId = clientId
where month(billDate) = 3 and year(billDate) = 2018

要仅列出在 2018 年另一个月份也付款的客户,请再次加入派生表:

select * from billpayment b
join loans l on b.customerId = l.clientId
join (select distinct b1.clientId as clientid1 from billpayment b1
      where year(b1.billdate) = 2018 and month(b1.billdate) <> 3) c
        on b.customerId = c.clientId1 
where month(b.billDate) = 3 and year(b.billDate) = 2018

要检查他们是否在 2018 年开始贷款(假设按申请日期),请在 where 子句中添加 and:

select * from billpayment b
join loans l on b.customerId = l.clientId
join (select distinct b1.clientId as clientid1 from billpayment b1
      where year(b1.billdate) = 2018 and month(b1.billdate) <> 3) c
        on b.customerId = c.clientId1 
where month(b.billDate) = 3 and year(b.billDate) = 2018
and year(l.applicationDate) = 2018

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多