집 >데이터 베이스 >MySQL 튜토리얼 >MySQL에서 거래가 없는 날을 포함하여 지난 7일 동안의 거래 데이터를 검색하는 방법은 무엇입니까?
단일 테이블의 빈 행을 포함하여 지난 7일의 행 선택
MySQL 데이터베이스에서 다음 위치에서 트랜잭션을 검색하려고 합니다. 지난 7일 동안의 일일 총 판매량을 계산합니다. 그러나 특정 날짜에 대해 사용 가능한 데이터가 없더라도 결과 집합에 빈 행이 포함되도록 하려고 합니다.
이 문제를 해결하려고 시도했지만 쿼리에서는 다음이 포함된 날짜만 검색합니다. 업무. 원하는 결과를 얻으려면 접근 방식을 수정해야 합니다.
해결책:
해결책에는 하위 쿼리를 활용하여 지난 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
이 쿼리는 생성된 날짜를 다음과 결합합니다. 트랜잭션 테이블을 사용하면 트랜잭션이 없는 날에도 빈 행이 포함됩니다. 최종 결과 세트에는 지난 7일 동안의 구매 날짜와 총 판매 금액이 표시되며, 빈 행은 해당 날짜에 거래가 없음을 나타냅니다.
위 내용은 MySQL에서 거래가 없는 날을 포함하여 지난 7일 동안의 거래 데이터를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!