MySQL сравнивает данные из диапазонов дат до текущей строки и подсчитывает их - PullRequest
1 голос
/ 24 февраля 2011

Это относится к все еще открытому вопросу здесь - я хочу попытаться подойти к нему по-другому.

У меня есть таблица MySQL с двумя частями информации: order_dateи email_address.Это является исчерпывающим и недифференцированным, что означает наличие дубликатов, если кто-то совершил более одной покупки в день.

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

YYYY-MM | number_emails_this_month | numer_emails_repeated_prior

Где пример выходных данных из результата запроса будет выглядеть следующим образом:

YYYY-MM | number_emails_this_month | numer_emails_repeated_prior
2010-02     23423               1231
2010-03     4422                2234
2010-04     1424                650

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 12 марта 2011

На этот вопрос был дан ответ в следующем связанном вопросе здесь:

MySQL подзапрос с пользовательскими переменными

В конечном итоге решение состояло в том, чтобы создать таблицу с требуемыми диапазонами и объединить ее вместо использования подзапроса для определения рассматриваемых диапазонов. Оглядываясь назад, использование пользовательских переменных в MySQL помогло найти решение без подзапроса.

0 голосов
/ 26 февраля 2011

Я не уверен, что понимаю, что такое number_emails_repeated_prior. Если бы вы могли опубликовать краткий пример данных и соответствующий пример желаемых результатов, это было бы полезно.

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

SELECT DATE_FORMAT(order_date, '%Y-%m') as `YYYY-MM`, 
       COUNT(email_address) as `number_emails_this_month `
FROM table_name
WHERE email_address = 'some@address'
GROUP BY 1
ORDER BY 1
...