Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.043 c
15-1165849280
Шариков
2006-12-11 18:01
2006.12.31
Файлы типа PSR


3-1161248513
term1t
2006-10-19 13:01
2006.12.31
Dataset not in insert or edit mode


15-1165939077
Cyrax
2006-12-12 18:57
2006.12.31
Как можно заюзать хидер, не пользуясь директивой #include ?


2-1165686682
ezorcist
2006-12-09 20:51
2006.12.31
Уничтожить TClientSocket после disconnect-а.


8-1145632081
hbreaker
2006-04-21 19:08
2006.12.31
Аналог ACDSee





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский