powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом, если такой можно создать.
12 сообщений из 12, страница 1 из 1
Помогите с запросом, если такой можно создать.
    #39556607
abwabw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FireBird 2.5. Записей более 3 млн.

Имеем таблицу
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE TABTLF (
    DB_ID               INTEGER NOT NULL,
    DB_DATE           TIMESTAMP,
    DB_NUMTLF       VARCHAR(12),/*номер тлф*/
    DB_TYPE            VARCHAR(5)  /*"исход" или "вход"*/
);


Таблица с данными регистрации тлф вызовов, при этом у номера может быть только "вход" звонки, могут быть только "исход" звонки, а могут быть и те и другие.
Вопрос:
помогите создать запрос (если возможно) чтобы выбрать все номера у которых были и "вход" и "исход" за период, при этом у такого номера (DB_NUMTLF) вывести все строки этого номера с типом (DB_TYPE) и ДатойВременем (DB_DATE). А то что-то не могу понять в какую сторону копать.
...
Рейтинг: 0 / 0
Помогите с запросом, если такой можно создать.
    #39556622
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нифига не понял, приведи пример с парой десятков строк сырца и результат, который ты хочешь из этого сырца получить.
...
Рейтинг: 0 / 0
Помогите с запросом, если такой можно создать.
    #39556636
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Номера со входом-выходом находятся примерно так
Код: sql
1.
2.
3.
4.
select db_numtlf
  from tabtlf
  group by db_numtlf
  having min(db_type) != max(db_type)


А затем join к полученному сами записи по номеру.
...
Рейтинг: 0 / 0
Помогите с запросом, если такой можно создать.
    #39556639
abwabw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky,

См.рис.
+79030000001 не входит в результат, т.к. только "вход"
+79030000003 не входит в результат, т.к. только "исход"
+79030000005 не входит в результат, т.к. только "вход"
...
Рейтинг: 0 / 0
Помогите с запросом, если такой можно создать.
    #39556641
abwabw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery,

ОК

Модератор: Пользуйтесь тегом "CSV", а не скриншотами. Пример ниже.

DB_IDDB_NUMTLFDB_TYPEDB_DATE1+79030000001вход01.01.17 10:00
...
Рейтинг: 0 / 0
Помогите с запросом, если такой можно создать.
    #39556667
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abwabwвыбрать все номераэта раза противоречит приведенной табличке с результатами. Говоришь про номера, потом пишешь про звонки. Таки надо звонки или номера?
...
Рейтинг: 0 / 0
Помогите с запросом, если такой можно создать.
    #39556731
abwabw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky,

Благодаря идее WildSery, проблема решена.
Спасибо всем.
...
Рейтинг: 0 / 0
Помогите с запросом, если такой можно создать.
    #39556799
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abwabwБлагодаря идее WildSery, проблема решена.
Спасибо всем.Пациент так и не сказал, что где у него болит (вернее было приведено 2 взаимоисключающих версии), но лечение ему понравилось.

Все пациенты врут.
...
Рейтинг: 0 / 0
Помогите с запросом, если такой можно создать.
    #39556842
abwabw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky,

Вариантов лечения оказалось много, например такой
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  with
     mastertab as (
      select a.db_numtlf as m_numtlf
      from tabtlf a
      where (a.db_date between :PDATEBG and :PDATEND))
      group by 1
      having (min(a.db_type) != max(a.db_type))
     ),
     dettab as (
      select 
      c.db_numtlf as d_numtlf,
      c.db_type as d_type,
      c.db_date as d_date
      from tabtlf c
      where (c.db_date between :PDATEBG and :PDATEND)
     )
select m.m_numtlf, b.d_date, b.d_type
from mastertab m LEFT join dettab b on (m.m_numtlf = b.d_numtlf)



можно и без CTE.
...
Рейтинг: 0 / 0
Помогите с запросом, если такой можно создать.
    #39556884
abwabw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky,

А если фсё таки остались непонятки с примером, то согласен, пример чисто искуственный, но если хотите могу привести ещё пару аналогичных, но с другими предметами. Может тогда будет понятна задача.
Биологический:
Учёные наблюдают за муравьями, которые пронумерованы и бегают по круговой тропинке вокруг муравейника при этом отмечается номер муравья, его направление движения и время. Оказывается, что некоторые муравьи бегут только по часовой стрелке, некоторые только против часовой стрелки, а есть которые бегают и так и так. Задача: выбрать только тех муравьёв которые бегают и туда и обратно, при этом вывести все записи этих муравьёв.
Алкогольный:
В кабаке клиенты имеют бейджики с номерами и подходят к бармену и берут водку или пиво. При этом есть клиенты которые берут только водку, есть которые берут только пиво, а есть которые берут всё подряд. Задача выбрать всех клиентов которые не смогут на своих двоих уйти из кабака.

З.Ы. прошу прощения за баян.
...
Рейтинг: 0 / 0
Помогите с запросом, если такой можно создать.
    #39556943
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abwabwА если фсё таки остались непонятки с примером,Ты продолжаешь путать педали: сущность "номер" != сущность "звонок",
"муравьёв которые бегают и туда и обратно" != сущность "все записи этих муравьёв"
сущность "клиент" != сущность "стакан пива"
...
Рейтинг: 0 / 0
Помогите с запросом, если такой можно создать.
    #39557003
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abwabw,

N.B.
min() != max() это быстрый частный случай для 2-х значений.
В случае неопределённого количества свойств, используй count(distinct db_type) = 2
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом, если такой можно создать.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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