【发布时间】:2016-04-06 15:41:19
【问题描述】:
我有以下查询,它在下面的屏幕截图中提供了结果。我想要完成的是让最终结果只是每个 invoice_number 的最后一条记录。
我查看了与按组或子组选择最后一条记录相关的其他问题,但我的 sql 技能还没有达到我可以弄清楚如何应用其他问题中提供的解决方案的水平。
感谢任何帮助。
SELECT
`Invoice`.Amount AS amount,
zuora.convertDateTimeToGMTOffsetDateTime(`Invoice`.CreatedDate) AS created_date,
`Invoice`.InvoiceNumber AS invoice_number,
RatePlanCharge.chargeModel,
RatePlanCharge.chargeType,
`InvoiceItem`.`RatePlanChargeId`,
CASE
WHEN
PaymentMethod.type = 'CreditCard'
THEN
CONCAT(PaymentMethod.creditCardType,
' (',
REPLACE(PaymentMethod.creditCardMaskNumber,
'*',
''),
')')
WHEN
PaymentMethod.type = 'PayPal'
AND PaymentMethod.paypalEmail != ''
THEN
IF(PaymentMethod.paypalEmail != '',
CONCAT(PaymentMethod.type,
' (',
PaymentMethod.paypalEmail,
')'),
PaymentMethod.type)
WHEN PaymentMethod.type = 'WireTransfer' THEN 'Wire Transfer'
ELSE IF(Invoice.Amount = 0,
'None Required',
IF(PaymentMethod.type,
PaymentMethod.type,
'Unpaid'))
END AS payment_method,
IF(RatePlanCharge.chargeModel != 'Discount'
AND (RatePlanCharge.chargeType = 'Recurring'
OR RatePlanCharge.chargeType = 'Usage'),
TRUE,
FALSE) AS recurring
FROM
`InvoiceItem`
JOIN
`Invoice` ON `InvoiceItem`.`InvoiceId` = `Invoice`.`id`
LEFT JOIN
`RatePlanCharge` ON `RatePlanCharge`.`id` = `InvoiceItem`.`RatePlanChargeId`
LEFT JOIN
`InvoicePayment` ON `InvoicePayment`.`invoiceId` = `Invoice`.`id`
LEFT JOIN
`Payment` ON `Payment`.`id` = `InvoicePayment`.`paymentId`
LEFT JOIN
`PaymentMethod` ON `Payment`.`paymentMethodId` = `PaymentMethod`.`id`
LEFT JOIN
`CreditBalanceAdjustment` ON `CreditBalanceAdjustment`.`sourceTransactionId` = `Invoice`.`id`
WHERE
`Invoice`.`Status` = 'Posted'
AND Invoice.accountid = '2c92c0f84b786da2014bb934ef664f1b'
提供以下结果。我想将最终结果限制为仅以黄色突出显示的记录(每组发票编号中的最后一条记录):
【问题讨论】: