2013-12-12 2 views
1

У меня есть два столбца дат, t_date и s_date. Я подсчитываю количество записей, в которых s_date либо совпадает с датой t_date, либо в течение n-дневного окна после t_date.mysql-запрос с подзапросами, возвращающими более одной строки

Вот запрос. Он возвращает несколько строк.

select count(id) 
from customers 
where s_date >= t_date 
and s_date <= t_date + 1 
group by t_date; 

Есть ли способ, чтобы создать запрос, содержащий несколько sub queries, что каждый возвращать несколько строк? Чтобы я мог увеличить окно времени? Что-то вроде:

select (
    select count(id) 
    from customers 
    where s_date >= t_date 
    and s_date <= t_date + 1 
    group by t_date 
    ) as c1, 
    (
    select count(id) 
    from customers 
    where s_date >= t_date 
    and s_date <= t_date + 2 
    group by t_date 
    ) as c2; 

Этот запрос, однако, возвращает "Sub query returns more than 1 row" ошибка.

ответ

7

Вы можете использовать CASE выражение:

SELECT 
    SUM(CASE WHEN s_date >= t_date AND s_date <= t_date + 1 THEN 1 ELSE 0 END) AS c1, 
    SUM(CASE WHEN s_date >= t_date AND s_date <= t_date + 2 THEN 1 ELSE 0 END) AS c2 
    ... 
FROM customers 
GROUP BY t_date; 
+2

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

+0

@wxyz - Да, вы правы. Спасибо :) –

+0

@SaharshShah - Спасибо за редактирование. –

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