Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день, имеется таблица:
Отредактированно Tera2017 (19.02.2016 10:02:20)
Неактивен
день недели можно определить с помою http://dev.mysql.com/doc/refman/5.7/en/ … _dayofweek
покажите тестовый набор данных и желаемый для него результат.
Неактивен
Результат которого хочу добиться выше
Неактивен
если правильно понимаю, то
select BlockUnit, Unit, Xnumber, sum(if(DAYOFWEEK(Dprint)=2,`Count`,0)) as 'Понедельник', ... ,
(sum(if(DAYOFWEEK(Dprint)=6,`Count`,0)) - sum(if(DAYOFWEEK(Dprint)=2,`Count`,0))) as 'Распечатки' ... group by Xnumber;
Неактивен
Запрос, должен формировать данные за текущую неделю, а сейчас заполняются даже поля за прошлую неделю. Как поправить? Если данных нет за текущую неделю должны проставляться нули. Сегодня среда 24.02.2016.
Пример:
Отредактированно Tera2017 (24.02.2016 11:35:51)
Неактивен
where Dprint > now() - interval 7 day
Неактивен
За четверг пятницу данных быть не должно, но подтягивает старые за прошлый четверг и пятницу. Как быть?
Неактивен
Только если интервал изменить на 3 дня, вроде работает, а может есть какой-то универсальный способ?
Неактивен
понял, тогда
where week(Dprint, 3) = week(now(), 3) - 1
Неактивен
Результат такой, не верно. Я хочу, чтобы в понедельник, были данные за понедельник, вторник за вторник... Текущей недели, последний день недели за который есть данные отнимался от первого, собирались данные всего это должно быть за текущую неделю. А эти данные за прошлую неделю.
Отредактированно Tera2017 (24.02.2016 13:10:18)
Неактивен
Вот это хочу получать 24.02.2016-26.02.2016. Если данные появятся в пятницу значит от пятницы отнять младшую дату т.е на этой неделе среду, на др. неделе это может быть, понедельник, или вторник, либо вообще четверг. Такое вообще возможно реализовать на sql
Отредактированно Tera2017 (24.02.2016 13:07:46)
Неактивен
что-то я указал за прошлую неделю.
за текущую будет так:
where week(Dprint, 3) = week(now(), 3)
Неактивен
Данный запрос не универсален, т.к по идеи должен выводить данные за Среду поля Dprint а если рабочая неделя будет начинаться с др дня недели то придется менять постоянно, да еще и в сумма то же менять. Значит нет универсального способа?
Неактивен
данный запрос выведет данные за текущую неделю с понедельника по воскресенье, т.к. первые дни были выходные то данных за них нет соответственно в эти дни будет 0
Неактивен
А по вычислениям общего значения?
Неактивен
максимальный за неделю - минимальный?
GREATEST(понед, вторник, .. пятница) - LEAST(...) as `всего`;
вместо понед - sum(if(DAYOFWEEK(Dprint)=2,`Count`,0)) и т.д.
Неактивен
простое вычисление от крайнего дня за неделю (Пятница, либо др последний день рабочий в недели отнимается значение первого дня в недели где есть данные (Понедельник, либо как на этой недели Среда) и записывается в поле Всего напечатано
Неактивен
Я так понял вы предлагаете находить максимум и минимум по дням за неделю. И от большего отнимать меньшее.
Не могли бы полностью написать запрос, что у меня не получается.
Неактивен
select Block, Unit, Xnumber, Model,sum(if(DAYOFWEEK(Dprint)=2,`Count`,0)) as 'ПН', sum(if(DAYOFWEEK(Dprint)=3,`Count`,0)) as 'ВТ',
sum(if(DAYOFWEEK(Dprint)=4,`Count`,0)) as 'СР',sum(if(DAYOFWEEK(Dprint)=5,`Count`,0)) as 'ЧТ',
sum(if(DAYOFWEEK(Dprint)=6,`Count`,0)) as 'ПТ', GREATEST(ПН,ВТ,СР,ЧТ,ПТ) - LEAST(ПН,ВТ,СР,ЧТ,ПТ) as `Всего`from print where week(Dprint, 3) = week(now(), 3)
group by Block,Unit,Xnumber;
Неактивен
Ошибка
Неактивен
ПН,ВТ,СР,ЧТ,ПТ это для иллюстрации, вместо них нужно использовать соответствующие выражения типа sum(if(DAYOFWEEK(Dprint)=2,`Count`,0))
при поиске минимального нужно не учитывать нули.
можно заменять и на заведомо большое число, например, 1000000
if(sum(if(DAYOFWEEK(Dprint)=2,`Count`,0))=0, 1000000, sum(if(DAYOFWEEK(Dprint)=2,`Count`,0)))
целиком писать не буду
Неактивен
GREATEST(if(sum(if(DAYOFWEEK(Dprint)=2,`Count`,0))=0) AS ПН
Все верно?
Неактивен
GREATEST(if(sum(if(DAYOFWEEK(Dprint)=2,`Count`,0))=0), if(sum(if(DAYOFWEEK(Dprint)=3,`Count`,0))=0),if(sum(if(DAYOFWEEK(Dprint)=4,`Count`,0))=0),if(sum(if(DAYOFWEEK(Dprint)=5,`Count`,0))=0),if(sum(if(DAYOFWEEK(Dprint)=6,`Count`,0))=0))-LEAST(if(sum(if(DAYOFWEEK(Dprint)=2,`Count`,0))=10000), if(sum(if(DAYOFWEEK(Dprint)=3,`Count`,0))=1000000),if(sum(if(DAYOFWEEK(Dprint)=4,`Count`,0))=10000000),if(sum(if(DAYOFWEEK(Dprint)=5,`Count`,0))=1000000),if(sum(if(DAYOFWEEK(Dprint)=6,`Count`,1000000))=0)) AS `Всего`;
Все верно?
Неактивен
GREATEST(sum(if(DAYOFWEEK(Dprint)=2,`Count`,0)), ВТ,СР,ЧТ,ПТ)
- LEAST(if(sum(if(DAYOFWEEK(Dprint)=2,`Count`,0))=0, 1000000, sum(if(DAYOFWEEK(Dprint)=2,`Count`,0))), ВТ,СР,ЧТ,ПТ)
аналогично для ВТ,СР,ЧТ,ПТ
Неактивен