이 쿼리에서는 지난 7일 동안의 모든 거래를 검색하여 다음을 보장하는 것을 목표로 합니다. 매출이 기록되지 않은 날도 결과에 포함됩니다. 이 결과를 얻기 위해 두 개의 개별 쿼리를 결합하는 기술을 활용합니다.
먼저 중첩된 SELECT 문을 사용하여 지난 7일 내의 모든 날짜를 열거합니다. 이 쿼리는 거래 데이터의 기초가 되는 날짜 목록을 효과적으로 생성합니다.
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()
다음으로, 이 포괄적인 날짜 목록을 거래 테이블에서 일일 판매 데이터를 집계하는 쿼리와 결합합니다. 이 조인을 통해 기록된 거래와 활동이 없는 날짜에 대한 빈 행이 모두 포함됩니다.
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
이 두 쿼리를 완벽하게 통합하여 지정된 범위 내의 모든 날짜를 시간순으로 나열하는 단일 테이블을 효과적으로 구성합니다. 해당 판매 데이터 또는 거래가 발생하지 않은 경우 0으로 표시됩니다.
위 내용은 지난 7일 동안의 일일 거래를 표시하는 MySQL 쿼리에 빈 행을 포함하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!