[SQL] MySQL은 단일 테이블은 지난 7 일을 선택하고 빈 행을 포함
SQLMySQL은 단일 테이블은 지난 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.간단하게 함께 당신이 원하는 사용은 외부 조인 왼쪽 날짜와 하위 쿼리를 넣어 :
간단하게 함께 당신이 원하는 사용은 외부 조인 왼쪽 날짜와 하위 쿼리를 넣어 :
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.이것은 쉬운 일이 아니다. 나는 날짜 범위에서 일이 스레드의 도움을 생성했다 당신의 쿼리를 결합했다.
이것은 쉬운 일이 아니다. 나는 날짜 범위에서 일이 스레드의 도움을 생성했다 당신의 쿼리를 결합했다.
아이디어는 최근 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.이는 지난 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;
from https://stackoverflow.com/questions/23300303/mysql-single-table-select-last-7-days-and-include-empty-rows by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 하나 개의 SQL 쿼리에서 두 테이블을 병합 및 날짜 값이 고유하게 (0) | 2020.04.12 |
---|---|
[SQL] 배열 인수 여러 번에 집합을 반환하는 함수를 호출 (0) | 2020.04.12 |
[SQL] 그것은 특정 값에 대해 열을 쉼표로 구분을 조회 할 수 있습니까? (0) | 2020.04.12 |
[SQL] 날짜 시간 SQL에 유닉스 시간을 변환 (오라클) (0) | 2020.04.12 |
[SQL] 무엇 하위 쿼리를 EXISTS에서 쉽게 읽을 수있다? [닫은] (0) | 2020.04.12 |