【问题标题】:mysql sql select last record in each groupmysql sql选择每个组中的最后一条记录
【发布时间】: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'

提供以下结果。我想将最终结果限制为仅以黄色突出显示的记录(每组发票编号中的最后一条记录):

【问题讨论】:

    标签: mysql sql select grouping


    【解决方案1】:

    要获取每张发票的单行,您只需在查询末尾添加
    GROUP BY Invoice.InvoiceNumber
    但是从您的帖子中不清楚“最后”行的标准/属性是什么。它是原始的created_date 属性吗(在屏幕截图中已经转换了无法区分的日期)?如果是这样,那么您应该首先按发票编号对结果集进行排序,然后按创建日期降序排列(以便每张发票的最新记录被列为第一个,而 group caluse 将采用该记录),添加此
    ORDER BY Invoice.InvoiceNumber asc, Invoice.CreatedDate desc GROUP BY Invoice.InvoiceNumber

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2010-11-21
      相关资源
      最近更新 更多