Количество дней в текущем месяца - MySQL
Формулировка задачи:
Срочно нужна ваша помощь! Подскажите пожалуйста, нужен запрос, который бы выводил даты от начала текущего месяца до сегодняшнего дня. Например, если сегодня 11.04.2016, то результат должен быть таким:
Очень надеюсь на ваш помощь, всем + в карму
01.04.2016, 02.04.2016, 03.04.2016, 03.04.2016, 04.04.2016, 05.04.2016, 06.04.2016, 07.04.2016, 08.04.2016, 09.04.2016, 10.04.2016, 11.04.2016, 12.04.2016, 13.04.2016, 14.04.2016
Решение задачи: «Количество дней в текущем месяца»
textual
Листинг программы
SELECT date(calldate) AS calldate FROM cdr WHERE calldate > LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) AND calldate < DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY) AND LENGTH(src)>4 AND recordingfile LIKE 'in%' GROUP BY uniqueid
Объяснение кода листинга программы
В данном коде используется язык SQL и выполняется запрос к таблице cdr.
SELECT date(calldate) AS calldate
— здесь происходит выборка столбца calldate из таблицы cdr. Также, с помощью функции AS, этому столбцу присваивается псевдоним calldate.FROM cdr
— здесь указывается, из какой таблицы производится выборка.WHERE calldate > LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
— здесь устанавливается условие для выборки: значение столбца calldate должно быть больше даты, которая является последним днем месяца, уменьшенным на один месяц. Таким образом, выбираются только те строки, дата в которых больше последнего дня предыдущего месяца.AND calldate < DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY)
— здесь устанавливается еще одно условие: значение столбца calldate должно быть меньше даты, которая является последним днем текущего месяца, увеличенной на один день. Таким образом, выбираются только те строки, дата в которых меньше последнего дня текущего месяца.AND LENGTH(src)>4
— здесь устанавливается еще одно условие: длина значения столбца src должна быть больше 4 символов. Таким образом, выбираются только те строки, в которых значение столбца src имеет длину больше 4 символов.GROUP BY uniqueid
— здесь происходит группировка строк по значению столбца uniqueid.HAVING COUNT(DISTINCT calldate) = (SELECT COUNT(DISTINCT calldate) FROM cdr WHERE calldate > LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) AND calldate < DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY) AND LENGTH(src)>4 GROUP BY uniqueid)
— здесь используется подзапрос, который позволяет проверить, что количество уникальных значений даты в данной выборке равно количеству уникальных значений даты во всей таблице cdr, удовлетворяющих условиям выборки. Таким образом, это условие гарантирует, что в выборке будут только те строки, для которых количество уникальных значений даты соответствует ожидаемому.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д