Полагаю, вы хотите узнать, сколько заказов в текущем месяце.
выяснить, как преобразовать текст в столбцах OrderDate в тип данных DATE
.
используйте соответствующую арифметику даты в выражениях WHERE.
1: выражение такого типа дает вам DATE
, показывающий первый день месяцаиз Mon yy
Этот пример возвращает 2018-02-01
.
SELECT STR_TO_DATE(CONCAT(' 1-','Feb-18'), '%e-%b-%y')
Таким образом, вы можете использовать этот вид запроса, чтобы получить таблицу с DATE
значениями
SELECT CustomerID, OrderID,
STR_TO_DATE(CONCAT(' 1-',OrderDate), '%e-%b-%y') OrderDate
FROM table
Попробуйте.Убедитесь, что он правильно работает с вашими данными.
2: используйте эти значения DATE
в предложении WHERE.Для этого вам нужно знать, что функция LAST_DAY(CURDATE())
дает последний день этого месяца.И вам нужно знать, что LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
дает первый день этого месяца.
Итак, чтобы подсчитать все по идентификатору клиента в текущем месяце, сделайте это
SELECT COUNT(*) CustomerCount, CustomerId
FROM orders
WHERE STR_TO_DATE(CONCAT(' 1-',OrderDate), '%e-%b-%y') >=
LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
AND STR_TO_DATE(CONCAT(' 1-',OrderDate), '%e-%b-%y') <
LAST_DAY(CURDATE()) + INTERVAL 1 DAY
GROUP BY CustomerId
Аналогично получимвы подсчитываете год, заканчивающийся в конце этого месяца.
SELECT COUNT(*) 12MonthOrderCount, CustomerId
FROM orders
WHERE STR_TO_DATE(CONCAT(' 1-',OrderDate), '%e-%b-%y') >=
LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 YEAR
AND STR_TO_DATE(CONCAT(' 1-',OrderDate), '%e-%b-%y') <
LAST_DAY(CURDATE()) + INTERVAL 1 DAY
GROUP BY CustomerId
Затем вам нужно сгенерировать общий набор результатов, требуя присоединиться к этим двум подзапросам
SELECT CustomerId, CustomerCount, 12MonthOrderCount
FROM ( /* the query showing the full year data */ ) yr
FROM ( /* the query showing the month data */ ) mon ON yr.CustomerId=mo.CustomerId
Youможете попробовать все это здесь.https://www.db -fiddle.com / f / riyXu8MVjJKNWfWVQLmjUG / 0
Pro tip : к настоящему времени должно стать очевидным, что сохранение дат в столбцах DATE
делает жизньнамного проще, когда вы делаете такие вещи.