Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос на составление суммы / 23 сообщений из 23, страница 1 из 1
20.05.2015, 18:01:51
    #38964515
Michael1981
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
Есть распечатка телефонных разговоров, звонки на стационарный и сотовый.Цены на минуту звонка разные(допустим 1руб на стационарный и 2 руб на сотовый за мин разговора). есть колонка длительность в секундах. как написать запрос, чтобы первые Х звонков составили допустим 100 руб.
...
Рейтинг: 0 / 0
20.05.2015, 18:24:04
    #38964528
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
Гм... а если первые 10 звонков дают 99 рублей, в то время как первые 11 - уже 101, чё делать? вернуть NULL?
А если что-то найдено - то что собсно вернуть-то?
Как-нить более вменяемо сформулируйте задачу.
...
Рейтинг: 0 / 0
21.05.2015, 06:07:34
    #38964738
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
AkinaКак-нить более вменяемо сформулируйте задачу.+1
А то писать запрос, обращающийся к распечатке - это, знаете ли, как-то чересчур хардкорно.
...
Рейтинг: 0 / 0
21.05.2015, 11:25:42
    #38965002
Michael1981
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
AkinaГм... а если первые 10 звонков дают 99 рублей, в то время как первые 11 - уже 101, чё делать? вернуть NULL?
А если что-то найдено - то что собсно вернуть-то?
Как-нить более вменяемо сформулируйте задачу.
Если первые 10 звонков это 99 р., а 11-уже 101 р. , то надо вернуть строки составляющие 101р. так как , если я правильно понимаю, строка с частичной длительностью не может быт возвращена без доп. пояснений.

Добавил пример в excel

первые 38 звонков= 94.05, а 39 уже =110.33
как сделать запрос, чтобы в ответе был список из первых 39 строчек, но в строке 39 в колонке total_charge сумма 5.95 (100-94.05) и соответствующая длительность в секундах

Зарание благодарен
...
Рейтинг: 0 / 0
21.05.2015, 12:02:40
    #38965067
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
Код: sql
1.
2.
3.
4.
5.
6.
SELECT TOP 1 s1.call_start, Sum(s2.[total charge]) AS [Sum charge], SUM(1) AS [Count]
FROM Sheet1 AS s1, Sheet1 AS s2
WHERE (((s1.call_start)>=[s2].[call_start]))
GROUP BY s1.call_start
HAVING Sum(s2.[total charge]) < 100
ORDER BY 2 DESC;


Этот запрос выводит последнюю запись набора, для которой накапливаемая сумма всё ещё меньше 100 рублей. И количество записей в этом наборе.
...
Рейтинг: 0 / 0
21.05.2015, 12:03:56
    #38965068
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
PS. Таблица была импортирована в Аксесс, с именем Sheet1.
...
Рейтинг: 0 / 0
21.05.2015, 12:05:44
    #38965071
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
Для MySQL замени ТОР на LIMIT и квадратные скобки на бэк-тики... остальное можно оставить as is.
...
Рейтинг: 0 / 0
21.05.2015, 12:06:23
    #38965074
Запрос на составление суммы
Akina
Код: sql
1.
2.
3.
4.
5.
6.
SELECT TOP 1 s1.call_start, Sum(s2.[total charge]) AS [Sum charge], SUM(1) AS [Count]
FROM Sheet1 AS s1, Sheet1 AS s2
WHERE (((s1.call_start)>=[s2].[call_start]))
GROUP BY s1.call_start
HAVING Sum(s2.[total charge]) < 100
ORDER BY 2 DESC;


Этот запрос выводит последнюю запись набора, для которой накапливаемая сумма всё ещё меньше 100 рублей. И количество записей в этом наборе.в MySQL этот запрос ничего не выводит, кроме сообщения об ошибке, по причине отсутствия конструкции TOP n :)
...
Рейтинг: 0 / 0
21.05.2015, 12:56:25
    #38965164
Michael1981
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
AkinaДля MySQL замени ТОР на LIMIT и квадратные скобки на бэк-тики... остальное можно оставить as is.

простите, а что такое "бэк тики"?
...
Рейтинг: 0 / 0
21.05.2015, 13:00:54
    #38965176
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
Michael1981AkinaДля MySQL замени ТОР на LIMIT и квадратные скобки на бэк-тики... остальное можно оставить as is.

простите, а что такое "бэк тики"?`
...
Рейтинг: 0 / 0
21.05.2015, 13:11:27
    #38965191
Michael1981
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
AkinaДля MySQL замени ТОР на LIMIT и квадратные скобки на бэк-тики... остальное можно оставить as is.


В ответ получаем это:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'limit 1 s1.call_start, Sum(s2.`total charge` ) AS `Sum charge` , SUM(1) AS `Count` ' at line 1
...
Рейтинг: 0 / 0
21.05.2015, 13:12:33
    #38965194
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
Michael1981что такое "бэк тики"?Это такие задомнаперёдные кавычки, спецово прикормленные MySQL-ем для обрамления имён. Искать под латинской раскладкой на клавише, на которой нарисована русская "Ё".
...
Рейтинг: 0 / 0
21.05.2015, 13:13:43
    #38965197
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
Michael1981В ответ получаем этоПоздравляю, Вы изобрели новый синтатсис.
Вот только сервер этого не оценил...
...
Рейтинг: 0 / 0
21.05.2015, 13:16:02
    #38965198
Michael1981
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
AkinaMichael1981что такое "бэк тики"?Это такие задомнаперёдные кавычки, спецово прикормленные MySQL-ем для обрамления имён. Искать под латинской раскладкой на клавише, на которой нарисована русская "Ё".

Спасибо!
...
Рейтинг: 0 / 0
21.05.2015, 13:18:08
    #38965200
Michael1981
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
AkinaMichael1981В ответ получаем этоПоздравляю, Вы изобрели новый синтатсис.
Вот только сервер этого не оценил...

Ненавижу синтаксис MySQL , простой SQL намного лучше

а подробнее, если можно?
...
Рейтинг: 0 / 0
21.05.2015, 13:28:06
    #38965211
Запрос на составление суммы
Michael1981,

как вариант - можно заюзать переменные...
<== Создание и заполнение данными тестовой таблицы
Код: sql
1.
2.
3.
4.
5.
6.
create table calls (id integer, dlit integer);
insert into calls values(1, 3);
insert into calls values(2, 2);
insert into calls values(3, 4);
insert into calls values(4, 2);
insert into calls values(5, 1);

<== Основной запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select *
  from (
         SELECT case when @i <= 10 then 1 else 0 end as flag
              , @i := @i + dlit AS slide_sum
              , t.*
          FROM (
                 select * from calls order by id
               ) t
             , (select @i:=0) v0
       ) v1
 where flag = 1


(в примере - лимит суммы выборки = 10, соответственно - последняя строка не должна попадать в выборку)

З.Ы.
Ввиду отсутствия доступа к MySQL ничего не проверял...
...
Рейтинг: 0 / 0
21.05.2015, 13:33:22
    #38965215
Запрос на составление суммы
Добрый Э - Эх,

вот, замутил on-line проверку на sqlfiddle.com
...
Рейтинг: 0 / 0
21.05.2015, 13:41:39
    #38965224
Michael1981
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
Akina
Код: sql
1.
2.
3.
4.
5.
6.
SELECT TOP 1 s1.call_start, Sum(s2.[total charge]) AS [Sum charge], SUM(1) AS [Count]
FROM Sheet1 AS s1, Sheet1 AS s2
WHERE (((s1.call_start)>=[s2].[call_start]))
GROUP BY s1.call_start
HAVING Sum(s2.[total charge]) < 100
ORDER BY 2 DESC;


Этот запрос выводит последнюю запись набора, для которой накапливаемая сумма всё ещё меньше 100 рублей. И количество записей в этом наборе.

Смутил меня запрос "SELECT LIMIT 1"
...
Рейтинг: 0 / 0
21.05.2015, 13:50:34
    #38965235
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT s1.call_start, Sum(s2.`total charge`) AS `Sum charge`, SUM(1) AS `Count`
FROM Sheet1 AS s1, Sheet1 AS s2
WHERE s1.call_start>=s2.call_start
GROUP BY s1.call_start
HAVING Sum(s2.`total charge`) < 100
ORDER BY 2 DESC
LIMIT 1;
...
Рейтинг: 0 / 0
21.05.2015, 13:51:48
    #38965240
-k2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
Michael1981,

сколько можно уже кота мучить, откройте доку
http://www.mysql.ru/docs/man/SELECT.html
...
Рейтинг: 0 / 0
21.05.2015, 14:01:11
    #38965250
Michael1981
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
-k2-,

Вот именно это меня и смутило...
...
Рейтинг: 0 / 0
21.05.2015, 14:59:19
    #38965350
Запрос на составление суммы
Michael1981,

вариант на переменных чем-то не устроил?
...
Рейтинг: 0 / 0
21.05.2015, 17:34:10
    #38965624
lamer yuga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на составление суммы
Добрый Э - ЭхMichael1981,

вариант на переменных чем-то не устроил?поддерживаю) http://sqlfiddle.com/#!9/91b77/1
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select *
from(
  select c.id
    -- , c.dlit
    , c.dlit+least(0, 10-(@sum:=@sum+dlit)) dlmod
  from calls c,(select @sum:=0)f
  order by c.id
  )c
 where c.dlmod>0;
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос на составление суммы / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]