Количество дней в текущем месяца - 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.

  1. SELECT date(calldate) AS calldate — здесь происходит выборка столбца calldate из таблицы cdr. Также, с помощью функции AS, этому столбцу присваивается псевдоним calldate.
  2. FROM cdr — здесь указывается, из какой таблицы производится выборка.
  3. WHERE calldate > LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) — здесь устанавливается условие для выборки: значение столбца calldate должно быть больше даты, которая является последним днем месяца, уменьшенным на один месяц. Таким образом, выбираются только те строки, дата в которых больше последнего дня предыдущего месяца.
  4. AND calldate < DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY) — здесь устанавливается еще одно условие: значение столбца calldate должно быть меньше даты, которая является последним днем текущего месяца, увеличенной на один день. Таким образом, выбираются только те строки, дата в которых меньше последнего дня текущего месяца.
  5. AND LENGTH(src)>4 — здесь устанавливается еще одно условие: длина значения столбца src должна быть больше 4 символов. Таким образом, выбираются только те строки, в которых значение столбца src имеет длину больше 4 символов.
  6. GROUP BY uniqueid — здесь происходит группировка строк по значению столбца uniqueid.
  7. 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, удовлетворяющих условиям выборки. Таким образом, это условие гарантирует, что в выборке будут только те строки, для которых количество уникальных значений даты соответствует ожидаемому.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы