SQL запрос с датой и более - PullRequest
       15

SQL запрос с датой и более

1 голос
/ 01 сентября 2011

Предположим, у нас есть таблица с именем table1:

id  name    event    date
1   name1   f        2010-02-26 21:49:46
2   name2   f        2011-01-21 14:30:26
3   name3   f        2010-05-25 20:51:07
4   name2   r        2011-03-21 21:49:46
5   name4   t        2011-09-15 21:30:26
6   name2   t        2010-01-20 13:07:55
7   name2   t        2011-02-24 20:51:09
8   name1   r        2011-05-20 16:07:55
9   name2   r        2009-07-23 07:51:11
10  name2   r        2011-09-20 21:49:46

a) Поэтому я хочу, чтобы результат был в 4 столбцах:

name    f   r   t
name1   f:1 r:1 t:0
name2   f:1 r:3 t:2

b) Более того, я хочу быть в порядкев связи с самой большой суммой f * 2, r * 0.5, t * 4 DESC:

c) более того, я хочу подсчитать количество событий только в конкретный период, например, за последнюю неделю, месяц, последний6 месяцев.Можете ли вы вставить ниже SQL-запрос для ответа?Есть ли другие типы интервалов, например, месяцы, годы или часы?

SELECT *
FROM table1
WHERE date BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 WEEK) AND CURDATE()

заранее спасибо

1 Ответ

1 голос
/ 01 сентября 2011

Вы можете просто использовать несколько самостоятельных объединений (Примечание: это не проверено, поскольку у меня нет зависания установки MySQL, но это должно работать).

select a.name, f,r,t
from(
    select name, count(1) as f,2*count(1) as f_sum
    from table1
    where date >=current_date-30 --or whatever date range you want
    and event='f'
    group by name
    )a
join(
    select name, ,count(1) as r,0.5*count(1) as r_sum
    from table1
    where date >=current_date-30 --or whatever date range you want
    and event='r'
    group by name
    )b
on a.name=b.name
join(
    select name, count(1) as t,4*count(1) as t_sum
    from table1
    where date >=current_date-30 --or whatever date range you want
    and event='t'
    group by name
    )c
on b.name=c.name
order by f_sum+r_sum+t_sum desc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...