SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.11.2011 18:53:41

kostasoft
Участник
Зарегистрирован: 23.08.2011
Сообщений: 9

Подсчет суммы в зависимости от даты

Есть таблица с двумя полями:
- date1 (тип DATETIME)
- counter1 (тип TINYINT UNSIGNED)

Известно, что для записи, с датой (днем недели) от понедельника 06:00:00 до пятницы 06:00:00 цена одной единицы поля counter1 равна 130 руб, а с пятницы 06:00:00 до понедельника 06:00:00 - 150р

Необходимо посчитать сумму всех записей (потом сделаю нужного временного интервала, это не сложно), исходя из вышеописанных условий подсчета.

Как сформировать такой MySQL запрос?

Версия MySQL: 5.1.58

Неактивен

 

#2 12.11.2011 19:56:58

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Подсчет суммы в зависимости от даты

Неактивен

 

#3 12.11.2011 20:51:16

kostasoft
Участник
Зарегистрирован: 23.08.2011
Сообщений: 9

Re: Подсчет суммы в зависимости от даты

Задача, по моему мнению, разбивается на 2 части:
1. Нахождение цены одного count-a в зависимости от даты. Спасибо за ссылки, я понял, что нужно использовать CASE.
2. Нахождение суммы произведений цены и значения поля count1.

Для моих мозгов структура очень сложная...

Неактивен

 

#4 12.11.2011 21:07:24

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Подсчет суммы в зависимости от даты

select sum(counter1*( case when dayofweek(now())=6 and time(now())>'06:00:00' then 150 when...  else 130 end)) from `таблица`;

Неактивен

 

#5 12.11.2011 21:14:33

kostasoft
Участник
Зарегистрирован: 23.08.2011
Сообщений: 9

Re: Подсчет суммы в зависимости от даты

Спасибо, огромное!

Только одна тонкость.
Если бы цена зависела только от дня недели, то такое решение было бы самым верным:

$query = "SELECT SUM(counter*(CASE WHEN dayofweek(startdate)=1 THEN ".$mon_price." WHEN dayofweek(startdate)=2 THEN ".$tue_price." WHEN dayofweek(startdate)=3 THEN ".$wed_price." WHEN dayofweek(startdate)=4 THEN ".$thu_price." WHEN dayofweek(startdate)=5 THEN ".$fri_price." WHEN dayofweek(startdate)=6 THEN ".$sat_price." WHEN dayofweek(startdate)=7 THEN ".$sun_price." END)) FROM `stat_table` WHERE (startdate BETWEEN '2011-01-01 00:00:00' AND '2011-12-31 23:59:59')";

Но нужно считать не от 00:00:00, а 06:00:00, т.е. 6 часов утра.

Нельзя ли как нибудь в MySQL сделать dayofweek(startdate-$delta),
где $delta - будет равна 6 часам?

Отредактированно kostasoft (13.11.2011 01:01:07)

Неактивен

 

#6 13.11.2011 01:19:24

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Подсчет суммы в зависимости от даты

Думаю, здесь можно использовать конструкцию dayofweer(startdate - interval 1 hour)
Подробнее смотрите здесь.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson