2016-04-06 19 views
0

Ich habe die folgende Abfrage, die die Ergebnisse im Screenshot unten zur Verfügung stellt. Was ich versuche zu erreichen ist, dass das Endergebnis nur der letzte Datensatz für jede Rechnungsnummer ist.mysql sql wählen Sie den letzten Datensatz in jeder Gruppe

Ich habe mir andere Fragen im Zusammenhang mit der Auswahl des letzten Datensatzes nach Gruppe oder Untergruppe angeschaut und meine SQL-Kenntnisse sind nicht auf einem Niveau, wo ich herausfinden kann, wie ich die Lösungen anwenden könnte, die in diesen anderen Fragen bereitgestellt wurden.

Jede Hilfe wird geschätzt.

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' 

, die die folgenden Ergebnisse liefert. Ich mag die endgültigen Ergebnisse nur auf die Datensätze begrenzen, die in gelb (dem letzten Datensatz in jeder Gruppe von Rechnungsnummern) hervorgehoben werden:

enter image description here

Antwort

0

Um einzelne Zeile für jede Rechnung, können Sie einfach am Ende der Abfrage hinzufügen
GROUP BY Invoice.InvoiceNumber
Aber es ist nicht klar von Ihrem Beitrag, was ist das Kriterium/Eigenschaft für die letzte Zeile. Ist es die ursprüngliche created_date Eigenschaft (auf dem Screenshot gibt es bereits umgewandelte Daten, die nicht unterscheidbar sind)? Wenn dies der Fall ist, sollten Sie die Ergebnismenge zuerst nach der Rechnungsnummer und dann nach dem Erstellungsdatum in absteigender Reihenfolge sortieren (so dass der letzte Datensatz für jede Rechnung als erste aufgeführt wird und die Gruppe caluse diesen Wert annimmt), fügen Sie
hinzu ORDER BY Invoice.InvoiceNumber asc, Invoice.CreatedDate desc GROUP BY Invoice.InvoiceNumber

Verwandte Themen