>

올바른 날짜 범위를 쿼리하는 데 문제가 있습니다. 내 쿼리는 post_date>(날짜 제공)의 Where 절을 고려하지 않는 것 같습니다.

           SELECT `code`,
                `description`,
                SUM( IF( month = 3 && year = 2018, monthly_quantity_total, 0 ) ) AS monthlyqt,
                SUM( IF( month = 3 && year = 2018, monthly_price_total, 0 ) ) AS monthlypt,
                SUM( monthly_quantity_total ) AS yearlyqt,
                SUM( monthly_price_total ) AS yearlypt
            FROM (
                SELECT `invoices_items`.`code`,
                    `invoices_items`.`description`,
                    SUM( invoices_items.discounted_price * invoices_items.quantity_supplied ) AS monthly_price_total,
                    SUM( invoices_items.quantity_supplied ) AS monthly_quantity_total,
                    YEAR( invoices_items.datetime_created ) AS year,
                    MONTH( invoices_items.datetime_created ) AS month
                FROM `invoices_items`
                JOIN `invoices` ON `invoices`.`id` = `invoices_items`.`invoice_id`
                WHERE `invoices`.`is_finalised` = 1
                AND `invoices`.`post_date` > 2018-02-28                 
                AND `invoices_items`.`type` = 1                 
                GROUP BY `year`, `month`, `invoices_items`.`code`
                UNION ALL
                SELECT `credit_notes_items`.`code`,
                    `credit_notes_items`.`description`,
                    SUM( credit_notes_items.discounted_price * credit_notes_items.quantity_supplied * -1 ) AS monthly_price_total,
                    SUM( credit_notes_items.quantity_supplied ) AS monthly_quantity_total,
                    YEAR( credit_notes_items.datetime_created ) AS year,
                    MONTH( credit_notes_items.datetime_created ) AS month
                FROM `credit_notes_items`
                JOIN `credit_notes` ON `credit_notes`.`id` = `credit_notes_items`.`credit_note_id`
                WHERE `credit_notes`.`is_finalised` = 1
                AND `credit_notes`.`post_date` > 2018-02-28
                AND `credit_notes_items`.`type` = 1
                GROUP BY `year`, `month`, `credit_notes_items`.`code`
            ) AS sub
            GROUP BY code;

기본적으로 4 개의 테이블이 쿼리됩니다. invoices invoices_items credit_notes  그리고 credit_notes_items .

표 1-송장

id    post_date    is_finalised
1     2018-01-01   1
2     2018-02-01   1
3     2018-03-01   1

표 2-송장 _ 항목

id    invoice_id    code    description    discounted_price    quantity_total    type
1     1             TEST-01 Test product   9.99                1                 1
2     1             TEST-01 Test product   9.99                2                 1
3     2             TEST-01 Test product   9.99                5                 1
4     3             TEST-01 Test product   9.99                5                 1

위에 몇 가지 예제 행을 제공했습니다. 위의 표 1과 2에서 원하는 결과는 다음과 같아야합니다.

원하는 결과

code    description    monthyqt    monthlypt    yearlyqt    yearlypt
TEST-01 Test product   5           49.95        5           49.95

받은 결과는 다음과 같습니다.

수신 된 출력

code    description    monthyqt    monthlypt    yearlyqt    yearlypt
TEST-01 Test product   5           49.95        13          129.87

Where 절을 사용하여 달성하려는 날짜 범위를 제외하고 쿼리가 의도 한대로 작동합니다. invoices 와 일치하지 않는 행을 필터링하려고합니다. . post_date  >2018-02-28 (및 credit_notes ) . post_date  >2018-02-28).

여기서 내가 뭘 잘못했는지 잘 모르겠지만 도움을 주시면 감사하겠습니다.

미리 감사합니다.


  • 답변 # 1

    나는 그것을 해결했다. 기본적으로 날짜 값을 구문 분석하는 변수는 작은 따옴표로 묶어야했습니다.

    예 :

    invoices.post_date > '2018-02-28'
    
    

    항상이 단순한 것만으로도 당신을 버립니다.

  • 이전 java - 이진 파일에서 배열로 객체를 읽는 중 ClassCastException
  • 다음 c# - 서비스가 이미 IServiceCollection에 추가되었는지 확인하는 방법