Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2017, 12:20   #1
Parallelogram
Недотепа
Форумчанин
 
Регистрация: 18.01.2011
Сообщений: 174
По умолчанию Вывод сумм за каждый день

Здравствуйте. Не могу понять как вывести количество строк, в которых `del`='1' за каждый день. Так чтобы получилась таблица: cnt - day.
Код:
id - del - date
1 - 0 - 2017/01/01
2 - 0 - 2017/01/01
3 - 1 - 2017/01/01
4 - 0 - 2017/01/02
5 - 1 - 2017/01/03
6 - 1 - 2017/01/03
Должно получиться:
Код:
cnt - date
1 - 2017/01/01
0 - 2017/01/02
2 - 2017/01/03
Я могу вывести отдельно за каждый промежуток, но как сделать за каждый день сразу одним запросом, не знаю.
Код:
SELECT count(*) AS `cnt`
FROM `table`
WHERE
    `del`='0'
  AND
    `time_create`
  BETWEEN
    '2017/08/01'
  AND
    '2017/08/02'
Parallelogram вне форума Ответить с цитированием
Старый 21.08.2017, 12:27   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А волшебное group by?
Код:
SELECT `time_create`,sum(CASE WHEN `del`='1' THEN 1 ELSE 0 END) AS `cnt`
  FROM `table`
  WHERE `time_create` BETWEEN '2017/08/01'   AND '2017/08/02'
  GROUP BY `time_create`
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.08.2017, 12:43   #3
Parallelogram
Недотепа
Форумчанин
 
Регистрация: 18.01.2011
Сообщений: 174
По умолчанию

Да, действительно, этот вариант работает. Но только я написал условие в общем виде. У меня немного по-другому задано поле `time_create`.
type = datetime,
value = 2017-08-20 16:41:11

Так они не группируются
Parallelogram вне форума Ответить с цитированием
Старый 21.08.2017, 12:57   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Найди функции как получить дату без времени и группируй по полученной дате
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.08.2017, 13:01   #5
Parallelogram
Недотепа
Форумчанин
 
Регистрация: 18.01.2011
Сообщений: 174
По умолчанию

Вот функция:
Код:
SELECT DATE_FORMAT(`time_create`,"%Y-%m-%d") AS `group_date` FROM `table` GROUP BY `group_date`
Я наверно плохо понимаю как это работает.
Код:
SELECT `new_date`, sum(CASE WHEN `del`='1' THEN 1 ELSE 0 END) AS `cnt`
  FROM `table`
  WHERE
  	(SELECT DATE_FORMAT(`time_create`,"%Y-%m-%d") AS `group_date` FROM `table` GROUP BY `group_date`) AS `new_date`
  BETWEEN '2017-08-11' AND '2017-08-21'
  GROUP BY `new_date`
Понятное дело ругается на синтаксис.
Parallelogram вне форума Ответить с цитированием
Старый 21.08.2017, 13:07   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А так
Код:
SELECT DATE_FORMAT(`time_create`,"%Y-%m-%d"),sum(CASE WHEN `del`='1' THEN 1 ELSE 0 END) AS `cnt`
  FROM `table`
  WHERE `time_create` BETWEEN '2017/08/01'   AND '2017/08/02'
  GROUP BY DATE_FORMAT(`time_create`,"%Y-%m-%d")
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.08.2017, 13:14   #7
Parallelogram
Недотепа
Форумчанин
 
Регистрация: 18.01.2011
Сообщений: 174
По умолчанию

Да, спасибо. Работает
Код:
SELECT  DATE(`time_create`) AS `new_date`, sum(CASE WHEN `del`='1' THEN 1 ELSE 0 END) AS `cnt`
  FROM `table`
  WHERE `time_create` BETWEEN '2017-08-10' AND '2017-08-21'
  GROUP BY DATE(`time_create`)
Parallelogram вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
есть 200 тонн цемента, в первый день я трачу 5 тонн, дальше каждый день на 20% больше. Как при помощи цикла while заставить программу показать, через сколько дней цемент кончится? LaSTiqq Паскаль, Turbo Pascal, PascalABC.NET 3 21.04.2017 17:47
С++ Лыжник, начав тренировки, в первый день пробежал n км. Каждый следующий день он увеличивал пробег на m% от пробега предыдущего дня. Сколько километров он пробежит за k дней. marina46 Помощь студентам 9 23.11.2016 18:27
Случайное значение каждый день Fakov HTML и CSS 3 12.08.2016 11:28
Обнуление каждый день KLOP Общие вопросы Delphi 4 07.04.2009 04:59