Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.31;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.034 c
1-1163162281
mmms
2006-11-10 15:38
2006.12.31
Как вставить пункт в выпадающее меню IE


2-1166089139
Dimon777
2006-12-14 12:38
2006.12.31
Update в Paradox приводит к потере Memo-полей


15-1165569209
AntiUser
2006-12-08 12:13
2006.12.31
Какие есть типы лицензий компьютерного обеспечения?


6-1155109077
Kiloper
2006-08-09 11:37
2006.12.31
Как пользоваться функцией POST компонента IdHTTP?


2-1165852014
AlexanderMS
2006-12-11 18:46
2006.12.31
Проблемы с организацией класса.