mySQL выбирает любой отдел, в котором были транзакции каждый месяц в прошлом году - PullRequest
1 голос
/ 29 июля 2011

Извините за конкретный заголовок, я пытался придумать способ обобщить его больше, но я не настолько осведомлен - думаю, поэтому я спрашиваю здесь ...

У меня естьтаблица с миллионами транзакций и один из столбцов - это идентификатор отдела, который выполнил эту конкретную транзакцию:

+-----------------------------------+
| ID | DeptID | Amount |    Date    |
+-----------------------------------+
| 1  |   46   |  4.99  | 2010-01-01 |
+-----------------------------------+
| 2  |   46   |  2.99  | 2010-03-07 |
+-----------------------------------+
| 3  |   57   |  9.99  | 2010-04-04 |
+-----------------------------------+

Я хочу выполнить запрос, который вернет любой 1 идентификатор отдела, который содержит хотя бы одну транзакциюза каждый месяц в прошлом году (сегодня 2011-07-28, я начинаю с 2010-08-01 и заканчиваю 2011-07-28)

Есть ли способ сделать это без многократногозапросы?

Ответы [ 3 ]

3 голосов
/ 29 июля 2011
SELECT DeptID, COUNT(DISTINCT MONTH(`date`)) AS month_count
FROM Transactions
WHERE `date` >= CURDATE() - INTERVAL 1 YEAR
GROUP BY DeptID
HAVING month_count = 12;
0 голосов
/ 29 июля 2011

ОК, есть переменная, которая является текущей датой в том же формате, что и в таблице, которая у вас сейчас есть, затем сделайте, когда дата базы данных + 1 год больше, чем текущая дата, если нет, то ее больше года назад

0 голосов
/ 29 июля 2011

Я полагаю, что вам нужно обновить столбец при выполнении транзакций или иметь таблицу с идентификатором, временем транзакции и столбцами транзакций, где id - это идентификатор, время транзакции - всякий раз, когда они совершают транзакции, и увеличение столбца транзакции на 1 при каждой транзакции создайте один запрос, где транзакция больше или равна 1, а время транзакции больше или равно текущему времени - 1 год (в секундах)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...