복붙노트

[SQL] MySQL은 단일 테이블은 지난 7 일을 선택하고 빈 행을 포함

SQL

MySQL은 단일 테이블은 지난 7 일을 선택하고 빈 행을 포함

I에 유래 여기에 비슷한 문제를 수색하지만 난 할 노력하고있어,이 일을하는 방법을 이해할 수 없었다 ...

그래서, 총 판매 금액을 데이터베이스에서 지난 7 일 거래를 얻고 싶어하고 어떤 일에 대한 데이터가없는 경우에도 빈 행을 포함한다.

내가 지금까지 가지고 : http://sqlfiddle.com/#!2/f4eda/6

이 출력 :

| PURCHASE_DATE | AMOUNT |
|---------------|--------|
|    2014-04-25 |     19 |
|    2014-04-24 |     38 |
|    2014-04-22 |     19 |
|    2014-04-19 |     19 |

내가 원하는 것은 :

| PURCHASE_DATE | AMOUNT |
|---------------|--------|
|    2014-04-25 |     19 |
|    2014-04-24 |     38 |
|    2014-04-23 |      0 |
|    2014-04-22 |     19 |
|    2014-04-21 |      0 |
|    2014-04-20 |      0 |
|    2014-04-19 |     19 |

어떤 도움에 감사드립니다 :)

해결법

  1. ==============================

    1.간단하게 함께 당신이 원하는 사용은 외부 조인 왼쪽 날짜와 하위 쿼리를 넣어 :

    간단하게 함께 당신이 원하는 사용은 외부 조인 왼쪽 날짜와 하위 쿼리를 넣어 :

    select d.thedate, coalesce(SUM(amount), 0) AS amount
    from (select date('2014-04-25') as thedate union all
          select date('2014-04-24') union all
          select date('2014-04-23') union all
          select date('2014-04-22') union all
          select date('2014-04-21') union all
          select date('2014-04-20') union all
          select date('2014-04-19')
         ) d left outer join
         transactions t
         on t.purchase_date = d.thedate and vendor_id = 0
    GROUP BY d.thedate
    ORDER BY d.thedate DESC;
    
  2. ==============================

    2.이것은 쉬운 일이 아니다. 나는 날짜 범위에서 일이 스레드의 도움을 생성했다 당신의 쿼리를 결합했다.

    이것은 쉬운 일이 아니다. 나는 날짜 범위에서 일이 스레드의 도움을 생성했다 당신의 쿼리를 결합했다.

    아이디어는 최근 7 일 날짜의 목록을 얻을 수 있었다 그래서 다음 왼쪽 당신이 가지고있는 쿼리에 대한 고정 금액 0이 날짜에 가입 한 후 마지막으로 그 합계. 이것은 어떤 날짜 범위에 사용될 수 있습니다, 단지 두 쿼리를 변경해야

    select 
    t1.purchase_date,
    coalesce(SUM(t1.amount+t2.amount), 0) AS amount
    from
    (
      select DATE_FORMAT(a.Date,'%Y-%m-%d') as purchase_date,
      '0' as  amount
      from (
        select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date
        from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
        cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
        cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
      ) a
      where a.Date BETWEEN NOW() - INTERVAL 7 DAY AND NOW()
    )t1
    left join
    (
      SELECT DATE_FORMAT(purchase_date, '%Y-%m-%d') as purchase_date,
      coalesce(SUM(amount), 0) AS amount
      FROM transactions
      WHERE purchase_date BETWEEN NOW() - INTERVAL 7 DAY AND NOW()
      AND vendor_id = 0
      GROUP BY purchase_date
    )t2
    on t2.purchase_date = t1.purchase_date
    group by t1.purchase_date
    order by t1.purchase_date desc
    

    데모

  3. ==============================

    3.이는 지난 7 일입니다;

    이는 지난 7 일입니다;

    select d.thedate, coalesce(SUM(amount), 0) AS amount
    from (select DATE(NOW()) as thedate union all
          select DATE(DATE_SUB( NOW(), INTERVAL 1 DAY)) union all
          select DATE(DATE_SUB( NOW(), INTERVAL 2 DAY)) union all
          select DATE(DATE_SUB( NOW(), INTERVAL 3 DAY)) union all
          select DATE(DATE_SUB( NOW(), INTERVAL 4 DAY)) union all
          select DATE(DATE_SUB( NOW(), INTERVAL 5 DAY)) union all
          select DATE(DATE_SUB( NOW(), INTERVAL 6 DAY))) d left outer join
         transactions t
         on t.purchase_date = d.thedate and vendor_id = 0
    GROUP BY d.thedate
    ORDER BY d.thedate DESC;
    
  4. from https://stackoverflow.com/questions/23300303/mysql-single-table-select-last-7-days-and-include-empty-rows by cc-by-sa and MIT license