2017-01-26 5 views
1

У меня есть ниже таблица:MySQL кумулятивных счета открытых позиции

id  reference created_at    closed_at 
__  ______  ___________    __________ 
1  62506  2017-01-09 12:05:34  2017-01-09 16:14:55 
2  62507  2017-01-09 12:09:47  NULL 
3  62508  2017-01-10 12:09:48  NULL 
4  62509  2017-01-10 12:11:15  NULL 
5  62510  2017-01-10 12:12:41  2017-01-12 13:52:04 
6  62511  2017-01-11 12:18:01  NULL 
7  62512  2017-01-11 12:20:26  2017-01-15 11:39:31 
8  62513  2017-01-11 12:29:19  NULL 
9  62514  2017-01-12 12:37:11  NULL 
10  62515  2017-01-12 12:43:31  NULL 
11  62516  2017-01-12 13:20:49  NULL 
12  62517  2017-01-12 13:30:58  2017-01-12 17:36:24 

Я хотел бы запрос, который возвращает качение общей сложности элементов, а также, сколько мы имеем «открытый» в этот день (открытое существо нуля в closed_at или дата закрытия выше, чем дата результаты строк)

somedate  Total Open 
---------- ------ ----- 
2017-01-09 2  1  
2017-01-10 5  4 
2017-01-11 8  7 
2017-01-12 12  10 

Я знаю, что нужно делать какой-то совокупный счет, но я дрянь и нужна ваша помощь :)

ответ

2

Вот один простой способ , Получите уникальные даты, а затем использовать связанные подзапросы:

select d.dte, 
     (select count(*) from t where t.created_at < d.dte + interval 1 day 
     ) as total, 
     (select count(*) from t where t.closed_at < d.dte + interval 1 day 
     ) as closed, 
     (select count(*) from t 
     where t.created_at < d.dte + interval 1 day and 
       (t.closed_at is null or t.closed_at >= d.dte + interval 1 day) 
     ) as total 
from (select date(created_at) as dte from t 
     union -- on purpose to remove duplicates 
     select date(closed_at) from t 
    ) d; 

+ interval 1 day так «день» является в полночи дня.

Недостаток date() в сравнении заключается в том, что коррелированные подзапросы могут использовать индексы.

union В подзапросе есть все даты с активностью, даже если нет новых предметов (только закрытые предметы).

+0

Это именно то, что я ищу, спасибо. Мне действительно нужно освежить мой sql, я знаю основы, чтобы сказать, что агрегаты, но когда вы начинаете проникать в такие вещи, как коррелированные подзапросы, это идет по моей голове, какие-либо советы по книгам или учебникам, чтобы немного поднять уровень? – Lovatt

+1

@Lovatt Просто посидите здесь немного. Вскоре вы это почувствуете. – Strawberry