2015-11-16 3 views
0

У меня есть 1 стол с 4-мя колоннамигруппу запросов на 2 колонки

id, name, key, date 
1,'A' ,'x1','2015-11-11' 
2,'A' ,'x1','2015-11-11' 
3,'B' ,'x2','2015-11-11' 
4,'B' ,'x2','2015-11-11' 
5,'A' ,'x1','2015-11-12' 
6,'A' ,'x1','2015-11-12' 
7,'B' ,'x2','2015-11-12' 
8,'B' ,'x2','2015-11-12' 
9,'D' ,'x3','2015-11-12' 

Я хочу группу по [ключ] и [дата]. Результат я хочу это:

2015-11-11    2 

2015-11-12    1 

2: дата 2015-11-11 имеют 4 строки (1.2.3.4), но дубликат ключа, поэтому, когда группа по мы только 2 ряда.

1: дата 2015-11-12 имеет 5 строк (5,6,7,8,9), но имеет 4 строки (5,6,7,8) дубликат с датой 2015-11-11, я не 't want calculator => У нас есть только 1 ряд (9)

Прошу прощения за мой английский. Надеюсь, ты сможешь понять мой вопрос.

Пожалуйста, помогите мне во всех отношениях. Я использую mysql.

+0

Можете ли вы объяснить, что '2' и' 0 'в результате означает? – Mureinik

+0

Вы можете видеть, что у нас есть 4 строки. когда я группирую по дате, у нас есть 2 строки для 2-х дней. Дата 2015-11-11 имеет 2 строки, но я хочу, чтобы дата 2015-11-12 имела 0 строк. Потому что дата 2015-11-12 имеет 2 строки с [ключ] дублированием с [ключ] в дату 2015-11-11 => группой по 0 строк. –

+0

Так что jarlh правильно ответил на этот вопрос? – Strawberry

ответ

1
select key, date, (select count(*) from tablename t2 
        where t2.key = t1.key 
        and t2.date = t1.date 
        and not exists (select 1 from tablename t3 
            where t3.key = t2.key 
             and t3.date < t2.date)) 
from tablename t1 

Вы можете использовать коррелированный подзапрос для подсчета ключей даты. Не считайте, что ключевое значение этой даты уже найдено для более ранней даты.

Альтернативное решение:

select t1.key, t1.date, count(*) 
from tablename t1 
    LEFT JOIN (select key, min(date) as date from tablename group by key) t2 
    ON t2.key = t1.key and t2.date = t1.date 
group by t1.key, t1.date 
+0

Я думаю, что ваш путь хорош. Моему требованию требуется только группа по [дате], но не нужно дублировать [ключ]. Считаете ли вы, что этот путь лучше? Мои данные очень большие. –

+0

Что делать, если одна дата имеет несколько разных значений ключа? Не можете ли вы добавить несколько дополнительных значений в свои данные образца, что делает его немного более похожим на реальные данные - что, вероятно, немного сложнее, чем сейчас. Не забудьте также отрегулировать желаемый выход! – jarlh

+0

@ChauApple Редактировать свой вопрос соответствующим образом. – Strawberry

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