Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2011, 16:39   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ваше ТЗ я понял так - найти пассажира, у которого меньше всего полетов и если их несколько то из них выбрать того, у которого наибольшее время в полете? Странный запрос

Код:
SELECT TOP 1 C.pk_client,C.fio,C.nomer_pasport, 
    (SELECT COUNT(*) 
       FROM bilet B 
       WHERE B.fk_client=C.pk_client) AS CountPolet,
    (SELECT SUM(DATEDIFF(minute,R.date_otprav,R.date_pributie))
       FROM bilet B ,reis R
       WHERE B.fk_client=C.pk_client AND
             B.fk_reis=R.pk_reis) AS SumTime
  FROM client C
  ORDER BY 4,5 DESC
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 06.10.2011 в 16:41.
Аватар вне форума Ответить с цитированием
Старый 06.10.2011, 16:44   #12
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Неа чуть не так
Найти клиента у который провел найбольшее время в полете на наймешнем количестве авиакомпаний.
там все норм вот только как там вывести мне поле fio
Cpluser вне форума Ответить с цитированием
Старый 06.10.2011, 16:50   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Поменяй в своем запросе 1-ую и последнюю строку. Я еще в самом начале писал как Top использовать
Код:
SELECT TOP 1 pk_client ,
...
order by dlitelnost_vsekh_poletov DESC,diff_aviakomp_count_for_client
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.10.2011, 16:54   #14
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Но топ не всегда будет правильно так как вдруг будет пару человек у которых одинаково и ответ запроса будет не правильно.
Может подскажите как там можно вывести поле fio и все
Cpluser вне форума Ответить с цитированием
Старый 06.10.2011, 17:12   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В том запросе не получится. Можно так попробовать

Код:
SELECT U1.*
  FROM (
ваш запрос
) U1,
(
ваш модифицированный запрос из 13 поста
) U2
  WHERE U1.dlitelnost_vsekh_poletov=U2.dlitelnost_vsekh_poletov AND
            U1.diff_aviakomp_count_for_client=U2.diff_aviakomp_count_for_client
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.10.2011, 17:27   #16
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Хмм чуть не понял
вот так
Код:
SELECT U1.*
  FROM (
SELECT pk_client ,
fio ,
nomer_pasport , 
( SELECT COUNT(DISTINCT a.pk_aviakompania) 
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
JOIN samolet s ON r.fk_samolet =s.pk_samolet
JOIN aviakompania a ON s.fk_aviakompania = a.pk_aviakompania
WHERE b.fk_client = pk_client
) AS diff_aviakomp_count_for_client,
( SELECT  SUM(DATEDIFF(minute, r.date_otprav, r.date_pributie))
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
WHERE b.fk_client = pk_client
) AS dlitelnost_vsekh_poletov
FROM client 
WHERE ( SELECT COUNT(DISTINCT a.pk_aviakompania)
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
JOIN samolet s ON r.fk_samolet =s.pk_samolet
JOIN aviakompania a ON s.fk_aviakompania = a.pk_aviakompania
WHERE b.fk_client = pk_client
)<>0
) U1,
(
SELECT MAX(U1.dlitelnost_vsekh_poletov),MIN(U1.diff_aviakomp_count_for_client)
  FROM (
SELECT pk_client ,
fio ,
nomer_pasport , 
( SELECT COUNT(DISTINCT a.pk_aviakompania) 
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
JOIN samolet s ON r.fk_samolet =s.pk_samolet
JOIN aviakompania a ON s.fk_aviakompania = a.pk_aviakompania
WHERE b.fk_client = pk_client
) AS diff_aviakomp_count_for_client,
( SELECT  SUM(DATEDIFF(minute, r.date_otprav, r.date_pributie))
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
WHERE b.fk_client = pk_client
) AS dlitelnost_vsekh_poletov
FROM client 
WHERE ( SELECT COUNT(DISTINCT a.pk_aviakompania)
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
JOIN samolet s ON r.fk_samolet =s.pk_samolet
JOIN aviakompania a ON s.fk_aviakompania = a.pk_aviakompania
WHERE b.fk_client = pk_client
)<>0
) U2
  WHERE U1.dlitelnost_vsekh_poletov=U2.dlitelnost_vsekh_poletov AND
            U1.diff_aviakomp_count_for_client=U2.diff_aviakomp_count_for_client
Cpluser вне форума Ответить с цитированием
Старый 06.10.2011, 17:30   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А где в 13 посте MAX и MIN есть, про это я не говорилЮ Именно ваш запрс без MAXи MIN
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.10.2011, 17:41   #18
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Incorrect syntax near 'diff_aviakomp_count_for_client'.
Вот здесь ошибка U1.diff_aviakomp_count_for_client=U 2.diff_aviakomp_count_for_client



Код:
SELECT U1.*
FROM(
SELECT MAX(U1.dlitelnost_vsekh_poletov),MIN(U1.diff_aviakomp_count_for_client)
  FROM (
SELECT pk_client ,
fio ,
nomer_pasport , 
( SELECT COUNT(DISTINCT a.pk_aviakompania) 
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
JOIN samolet s ON r.fk_samolet =s.pk_samolet
JOIN aviakompania a ON s.fk_aviakompania = a.pk_aviakompania
WHERE b.fk_client = pk_client
) AS diff_aviakomp_count_for_client,
( SELECT  SUM(DATEDIFF(minute, r.date_otprav, r.date_pributie))
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
WHERE b.fk_client = pk_client
) AS dlitelnost_vsekh_poletov
FROM client 
WHERE ( SELECT COUNT(DISTINCT a.pk_aviakompania)
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
JOIN samolet s ON r.fk_samolet =s.pk_samolet
JOIN aviakompania a ON s.fk_aviakompania = a.pk_aviakompania
WHERE b.fk_client = pk_client
)<>0
) U1,
(
SELECT pk_client ,
fio ,
nomer_pasport ,
( SELECT COUNT(DISTINCT a.pk_aviakompania)
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
JOIN samolet s ON r.fk_samolet =s.pk_samolet
JOIN aviakompania a ON s.fk_aviakompania = a.pk_aviakompania
WHERE b.fk_client = pk_client
) AS diff_aviakomp_count_for_client ,
( SELECT SUM(DATEDIFF(minute, r.date_otprav, r.date_pributie))
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
WHERE b.fk_client = pk_client
) AS dlitelnost_vsekh_poletov
FROM client
) U2
  WHERE U1.dlitelnost_vsekh_poletov=U2.dlitelnost_vsekh_poletov AND
            U1.diff_aviakomp_count_for_client=U2.diff_aviakomp_count_for_client
Cpluser вне форума Ответить с цитированием
Старый 06.10.2011, 18:25   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
SELECT U1.*
  FROM (

SELECT pk_client ,
fio ,
nomer_pasport , 
( SELECT COUNT(DISTINCT a.pk_aviakompania) 
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
JOIN samolet s ON r.fk_samolet =s.pk_samolet
JOIN aviakompania a ON s.fk_aviakompania = a.pk_aviakompania
WHERE b.fk_client = pk_client
) AS diff_aviakomp_count_for_client,
( SELECT  SUM(DATEDIFF(minute, r.date_otprav, r.date_pributie))
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
WHERE b.fk_client = pk_client
) AS dlitelnost_vsekh_poletov
FROM client 
WHERE ( SELECT COUNT(DISTINCT a.pk_aviakompania)
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
JOIN samolet s ON r.fk_samolet =s.pk_samolet
JOIN aviakompania a ON s.fk_aviakompania = a.pk_aviakompania
WHERE b.fk_client = pk_client
)<>0

) U1,

(
SELECT TOP 1 pk_client ,
fio ,
nomer_pasport , 
( SELECT COUNT(DISTINCT a.pk_aviakompania) 
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
JOIN samolet s ON r.fk_samolet =s.pk_samolet
JOIN aviakompania a ON s.fk_aviakompania = a.pk_aviakompania
WHERE b.fk_client = pk_client
) AS diff_aviakomp_count_for_client,
( SELECT  SUM(DATEDIFF(minute, r.date_otprav, r.date_pributie))
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
WHERE b.fk_client = pk_client
) AS dlitelnost_vsekh_poletov
FROM client 
WHERE ( SELECT COUNT(DISTINCT a.pk_aviakompania)
FROM bilet b
JOIN reis r ON b.fk_reis = r.pk_reis
JOIN samolet s ON r.fk_samolet =s.pk_samolet
JOIN aviakompania a ON s.fk_aviakompania = a.pk_aviakompania
WHERE b.fk_client = pk_client
)<>0
order by dlitelnost_vsekh_poletov DESC,diff_aviakomp_count_for_client

) U2
  WHERE U1.dlitelnost_vsekh_poletov=U2.dlitelnost_vsekh_poletov AND
        U1.diff_aviakomp_count_for_client=U2.diff_aviakomp_count_for_client
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками. Не пойму как определить сколько раз одна строка встречается в другой dykatob Общие вопросы C/C++ 10 29.04.2011 22:46
Строка(Условие, код, вывод) GreX454 Общие вопросы C/C++ 1 06.04.2010 08:38
Строка состаяния или загрузачная строка Sergeu Мультимедиа в Delphi 8 27.08.2008 10:32
Входная строка, сортировка, вывод... Scudetto Общие вопросы C/C++ 2 18.11.2007 23:05