2015-08-17 3 views
1

У меня есть простой запрос, который дает мне количество типов приложений; это выглядит примерно так:Группировка COUNT по времени в MySql

SELECT Application_Type, COUNT(*) FROM Loan_Applications GROUP BY Application_Type; 

Он возвращает что-то вроде этого:

Home 3 
Car 21 
Commercial 16 

Там есть поле в базе данных под названием Submission_Date (типа Date)

Как может Я запрашиваю и разбиваю эти данные по неделям?

Type This week Last week 2 weeks ago 
Home 1   1   1 
Car  9   6   6 
Commercial 10  0   3 

ответ

1

Вы можете попробовать что-то вроде:

SELECT 
    Application_Type, 
    SUM(IF(Submission_Date BETWEEN CURRENT_DATE AND CURRENT_DATE - INTERVAL 1 WEEK, 1, 0)) AS 'This week', 
    SUM(IF(Submission_Date BETWEEN CURRENT_DATE- INTERVAL 1 WEEK AND CURRENT_DATE - INTERVAL 2 WEEK, 1, 0)) AS 'Last week', 
    SUM(IF(Submission_Date BETWEEN CURRENT_DATE- INTERVAL 2 WEEK AND CURRENT_DATE - INTERVAL 3 WEEK, 1, 0)) AS '2 weeks ago', 
FROM Loan_Applications 
GROUP BY Application_Type 
; 

Или:

SET @date1w = CURRENT_DATE - INTERVAL 1 WEEK; 
SET @date2w = CURRENT_DATE - INTERVAL 2 WEEK; 
SET @date3w = CURRENT_DATE - INTERVAL 3 WEEK; 
SELECT 
    Application_Type, 
    SUM(IF(Submission_Date BETWEEN CURRENT_DATE AND @date1w, 1, 0)) AS 'This week', 
    SUM(IF(Submission_Date BETWEEN @date1w AND @date2w, 1, 0)) AS 'Last week', 
    SUM(IF(Submission_Date BETWEEN @date2w AND @date3w, 1, 0)) AS '2 weeks ago', 
FROM Loan_Applications 
GROUP BY Application_Type 
; 
1

Вы можете сделать расчет типа SUMIF. Следующие суммы суммируют количество строк, в которых дата представления находится в течение последней недели.

SUM(CASE WHEN submission_date >= CURDATE() - 7 THEN 1 ELSE 0 END) 

Затем вы можете повторить это для разных диапазонов, чтобы получить любые «полосы», которые вы желаете.

1

Попробуйте

SELECT 
Application_Type, 
SUM(WEEKOFYEAR(Submission_Date) = WEEKOFYEAR(NOW())) AS `This week`, 
SUM(WEEKOFYEAR(Submission_Date) = WEEKOFYEAR(DATE_ADD(NOW(),INTERVAL -1 WEEK))) AS `Last week`, 
SUM(WEEKOFYEAR(Submission_Date) = WEEKOFYEAR(DATE_ADD(NOW(),INTERVAL -2 WEEK))) AS `2 weeks ago` 
FROM Loan_Applications GROUP BY Application_Type; 
; 

оно основано на том факте, что сумма логического выражения в группе по будет считать случаи, когда выражение истинно

Смежные вопросы