2009-11-12 3 views
2

Я хочу рассчитать количество приложений студентом, разбитым по месяцам с момента их первого применения.Sql-запрос, разделенный на диапазон дат

Скажем, у меня есть структуру таблицы следующим образом:

Student  ApplicationDate 
-------  --------------- 
Barry  2009-01-01 
Barry  2009-01-20 
Barry  2009-01-23 
Barry  2009-02-01 
Barry  2009-02-15 
Barry  2009-03-01 

Я хотел бы что-то вдоль линий:

Student  Month  Applications 
-------  -----  ------------ 
Barry  1/2009 3 
Barry  2/2009 2 
Barry  3/2009 1 

Как вы выполнить это в SQL для всех студентов, для всех приложений ?

+0

Не могли бы вы предоставить схемы таблиц, пожалуйста? –

ответ

3
SELECT 
    student, 
    DATE_FORMAT(ApplicationDate,'%m/%Y') as Month 
    count(id) as Applications 
from YourTable 
group by ApplicationDate 
+0

Несомненно, что вы получите значения по дате, а не моему месяцу? – Murph

0
select Student, month(ApplicationDate) ApplicationMonth, count(*) 
from table_name 
group by Student, ApplicationMonth 
3

Если я вас правильно понимаю, это может быть достигнуто с помощью GROUP BY:

select 
    student, 
    year(ApplicationDate), 
    month(ApplicationDate), 
    count(*) as Applications 
from YourTable 
group by student, year(ApplicationDate), month(ApplicationDate) 
3

Чтобы дать Вам точный результат, указанный, я думаю, что это будет работать ...

select Student, 
     DATE_FORMAT(ApplicationDate,'%m/%Y') as 'Month', 
     count(*) as 'Applications' 
from tableName 
group by Student, month(ApplicationDate), year(AppilcationDate) 
order by year(ApplicationDate), month(ApplicationDate), Student 

EDIT: Изменен для использования функции DATE_FORMAT, как предложено Stanq.

3
select 
    student, 
    year(ApplicationDate), 
    month(ApplicationDate), 
    count(*) as Applications 
from YourTable 
group by student, year(ApplicationDate), month(ApplicationDate) 
Смежные вопросы