Форум: "Базы";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
ВнизSQL запрос Найти похожие ветки
← →
DelphiN! © (2006-10-20 09:36) [0]Не могу написать SQL запрос, который должен делать следующее :
Есть талбица со значениями открытия\закрытия сеансов в компьютерном клубе :
Computer TimeS TimePo Note TIME_ SUMM_
K1 00:00 01:00 Start seanse 00:00 60
K2 00:10 02:20 Start seanse 00:10 130
K1 00:00 01:00 Stop seanse 00:30 -30
K2 03:00 04:00 Start seanse 03:00 60
...
ПолеComputer
отвечает за имя компьютераTimeS
за время начала сеанса работы на компьютереTimePo
за время окончания сеанса работы на компьютереTIME_
время произведения операции над компьютером(открытия\остановки\добавления времени)SUMM_
сумма, оплаченая пользователем за аренду компьютера
Необходимо написать SQL запрос, который выводит "чистое" время проведенное за компьютером, а также чистую прибыль с каждого компьютера, тоесть таблица после выполнения SQL запроса должна выглядеть так :
Computer TimeS TimePo Note TIME_ SUMM_
K1 00:00 00:30 Start seanse 00:00 30
K2 00:10 02:20 Start seanse 00:10 130
K2 03:00 04:00 Start seanse 03:00 60
...
Языка SQL я знаю к сожалению только основы, поэтому прошу помощи в написании данного запроса
Заранее благодарен
← →
Sergey13 © (2006-10-20 09:55) [1]> Языка SQL я знаю к сожалению только основы
И не только языка SQL. Зачем столько ненужной и дублирующей информации?
ИМХО, логичнее бы было
Computer, Start_Time, End_Time
и все. Первые 2 поля заполнять при начале, последнее соответственно при онончании сеанса. Зачем такой огород то городить?
← →
Johnmen © (2006-10-20 10:11) [2]
> K1 00:00 01:00 Start seanse 00:00 60
Эту запись не понял. Время ноль, а деньги заплачены???
Рекомендую перед тем, как Sergey13 © (20.10.06 09:55) [1], хорошенько изучить предметную область... Похоже с ней проблемы...
← →
DelphiN! © (2006-10-20 12:17) [3]> [2] Johnmen © (20.10.06 10:11)
> > K1 00:00 01:00 Start seanse 00:
> 00 60
>
> Эту запись не понял. Время ноль, а деньги заплачены???
Время начала 00:00, окончания 01:00, время добавления записи в таблицу 00:00
> И не только языка SQL. Зачем столько ненужной и дублирующей
> информации?
> ИМХО, логичнее бы было
> Computer, Start_Time, End_Time
> и все. Первые 2 поля заполнять при начале, последнее соответственно
> при онончании сеанса. Зачем такой огород то городить?
Note - поле обязательное, так как может содержать значения Start seanse, Stop seanse, Add time, Start card seanse, Stop card seanse, Add card seanse ... А различять данную информацию необходимо во многих отчетах
Time_ - поле обязательное так как если происходит остановка или добавление времени нужно знать восколько это было, например может встретится такая строка :
K1 00:00 01:00 Stop seanse 00:30 -30
Из нее видно что остановка сенаса произведена в 00:30, остановленный сеанс имел длительность с 00:00 до 01:00 сумма возврата 30 y.e
Поле summ_ также обязательное, так как существует несколько тарифов, в зависимости от которых стоимость времени меняется
← →
ЮЮ © (2006-10-20 12:31) [4]K1 00:00 01:00 Start seanse 00:00 60
K1 00:00 01:00 Stop seanse 00:30 -30
а завтра будут опять точно такие же записи
K1 00:00 01:00 Start seanse 00:00 60
K1 00:00 01:00 Stop seanse 00:30 -30
И чем они, извините, отличаются?
З.Ы.
Следует выделить две сущнсти:
Сеанс
ID Computer DateS
1000 K1 01/01/06
1200 K1 02/01/06
События во время сеанса
ID Сеанс TimeS TimePo Note TIME_ SUMM_
3000 1000 00:00 01:00 Start seanse 00:00 60
3001 1000 00:00 01:00 Stop seanse 00:30 -30
3000 1200 00:00 01:00 Start seanse 00:00 60
3001 1200 00:00 01:00 Stop seanse 00:30 -30
И тогда уже запросом можно ответить на твои вопросы
← →
Johnmen © (2006-10-20 12:31) [5]
> DelphiN! © (20.10.06 12:17) [3]
Понятно.
Получить желаемое в [0] одним, сколь угодно сложным запросом практически невозможно, т.к. структура данных крайне плохо формализована...
← →
DelphiN! © (2006-10-20 12:44) [6]> [4] ЮЮ © (20.10.06 12:31)
Поле ID_ имеется, не указал его здесь так как думал что оно подразумевается
В полях TimeS,TimePo,Time_ данные идут в формате dd.mm.yyyy hh:nn:ss
Забыл указать тип СУБД FireBird 1.5
← →
DelphiN! © (2006-10-20 12:45) [7]Извиняюсь за неточность предоставленных данных
← →
unknown © (2006-10-20 12:49) [8]В дополнение к [4] - я бы еще и note выделить посоветовал.
← →
ЮЮ © (2006-10-20 12:49) [9]
> данные идут в формате dd.mm.yyyy hh:nn:ss
Вынужден повториться, что данные так не ходят :)
Лучше тип скажи
← →
DelphiN! © (2006-10-20 12:52) [10]> [9] ЮЮ © (20.10.06 12:49)
Тип полей DATE
← →
ЮЮ © (2006-10-20 12:57) [11]Итак, в требуемом запросе
TimeS - Min(TimeS)
TimePo - Max(TimePo)
Note - Min(Note),
TIME - Min(TIME_)
SUMM_ - SUMM(SUMM_)
c группировкой по Computer и Дата-состовляющей одного из полей-времени
С синтаксисом FB не на короткой ноге, так что, на этом откланяюсь :)
← →
Sergey13 © (2006-10-20 13:03) [12]> [3] DelphiN! © (20.10.06 12:17)
Даже если так, все равно, хранение всего в одной таблице - подход крайне неуклюжий. К тому, что я сказал в
> [1] Sergey13 © (20.10.06 09:55)
можно добавить еще (как минимум) одну таблицу с деталировкой сеанса, где подробно отражать все. По крайней мере не будет путанницы в сеансах одного рабочего места.
← →
ЮЮ © (2006-10-20 13:07) [13]K2 00:10 02:20 Start seanse 00:10 130
K2 03:00 04:00 Start seanse 03:00 60
c группировкой по Computer и Дата-состовляющей одного из полей-времени
Увы, вынужден отказатся от своих слов :(
Тут лучше пробежаться по НД. В ХП, например.
← →
DelphiN! © (2006-10-20 13:36) [14]> [12] Sergey13 © (20.10.06 13:03)
> [13] ЮЮ © (20.10.06 13:07)
Понятно, всем спасибо, действительно лучше пробежаться по набору данных
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c