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

Вниз

Как переделать запрос, чтобы вывелось то чего нету?   Найти похожие ветки 

 
tytus   (2007-11-28 12:56) [0]

Есть запрос, возвращающий по каждому номеру количество раз, сколько ентот номер встретился за сутки.

select a.adate, a.SN, Max(a.SNCOL) from
(select adate, subscriber_number SN,
ROW_NUMBER() over(partition by subscriber_number order by subscriber_number) SNCOL
from pcmd_main )a
where a.adate>=To_Date("25.11.2007") and a.adate<=To_Date("28.11.2007")
and a.SN in ("1011011146",
"1011010055",
"1011010082",
....
"1011010171"
)
group by a.adate, a.SN
order by a.adate, a.SN

вот. А нужно чтобы вывелись и те (или только те) номера которых нет в базе! но есть в списке a.Sn in(...)

Вот и думаю - возможно ли такое в принципе, и как такой запрос написать?


 
Desdechado ©   (2007-11-28 13:24) [1]

NOT IN


 
Sergey13 ©   (2007-11-28 13:31) [2]

> [0] tytus   (28.11.07 12:56)
> сколько ентот номер встретился за сутки.
> Max(a.SNCOL)

Я все время думал, что "сколько раз встретился" это COUNT.


 
tytus   (2007-11-28 13:45) [3]

>Desdechado ©   (28.11.07 13:24) [1]
а не выгребет ли потом запрос ВСЕ номера, которых нет в списке?
Мне же нужна только те которые в списке, но чтобы было что-то вроде:
a.adate      a.SN           a.SNCOUNT
25.11.2007 1011010055  256
25.11.2007 1011010082  112
25.11.2007 1011010099  0    //сие мне нужна!!!
25.11.2007 1011010102  96
25.11.2007 1011010115  0   //снова сие мне нужна!!!

вот что нужна!

>Sergey13 ©   (28.11.07 13:31) [2]
вычитал в доке новую аналитическую функцию ROW_NUMBER(), и решил
ее заюзать! имхо может быстрее чем COUNT?


 
Sergey13 ©   (2007-11-28 13:57) [4]

> [3] tytus   (28.11.07 13:45)
> Мне же нужна только те которые в списке, но чтобы было что-то вроде:

Тогда тебе надо не задавать этот список руками, а получать подзапросом и соединять его с основным. Откуда берется список?

> [3] tytus   (28.11.07 13:45)
> вычитал в доке новую аналитическую функцию ROW_NUMBER(),и решил ее заюзать! имхо может быстрее чем COUNT?

Это я уж потом стал запрос дочитывать, а сначала бросилось в глаза несоответствие. 8-)
А не слишком ты намудрил с ним? Судя по словесному описанию достаточно простого запроса с группировкой.


 
Desdechado ©   (2007-11-28 14:10) [5]

> 25.11.2007 1011010099  0    //сие мне нужна!!!
GROUP BY + HAVING


 
Anatoly Podgoretsky ©   (2007-11-28 16:19) [6]

> tytus  (28.11.2007 13:45:03)  [3]

Так это Having


 
tytus   (2007-11-28 16:58) [7]

господа дико извеняюсь...
канечна, HAVING падходит для выборки при группировке, но
... я не так сформулировал ТЗ!
Дело в том, что в <tytus   (28.11.07 13:45) [3] > подразумевалось, что
нумеров типо "25.11.2007 1011010099  0    //сие мне нужна!!!" НЕТУ в базе!
тоесть номера 1011010099 НЕТУ физически, но нужно вывести строку
как указано выше - с номером и то что он нигде не встретился,
a.SNCOUNT=0!
ЕСче раз дико извенияюсь....
Список пишу ричками, тоесть <Ctrl+C> <Ctrl+V>...
Простите если сможете что голову морочил...
у самого голова пухнет -))


 
Andrey ©   (2007-11-28 17:24) [8]

Хм... ну раз такие дела, то без хранимой процедуры не обойтись.
Хранимка перебирает все записи отсортированые по порядку, если находит дырку - выплевывает наружу результат. Все щасливы.


 
Кщд ©   (2007-11-29 06:10) [9]


> Хм... ну раз такие дела, то без хранимой процедуры не обойтись.

ещё как обойтись)
интересно, это MS или Oracle?


 
ЮЮ ©   (2007-11-29 09:33) [10]

> тоесть номера 1011010099 НЕТУ физически, но нужно вывести
> строку
> как указано выше - с номером и то что он нигде не встретился,
>
> a.SNCOUNT=0!


А откуда вообще взялись 1011010099 м 1011010115?
Пльзователь каждый день заново забивает в TMemo?

Тогда ощущается отсутствие в твоей модели сущности "Вскоре ожидаемые серийные номера" и соответствующей таблицы :)


 
Andrey ©   (2007-11-29 10:43) [11]

>Кщд ©   (29.11.07 06:10) [9]
>ещё как обойтись)
Хм............. долго думал, не придумал.
Есть таблица с последовательностью значений. Нужно выявить какие значения пропущены. Когда-то давно я долго бился с этой задачей и придумал только через процедуру.
Раскажите пожалуйста как это через один запрос сделать? При том что таблицы с полной последовательностью нет (ибо если есть - тривиальный лефт джоин).


 
sniknik ©   (2007-11-29 11:09) [12]

> При том что таблицы с полной последовательностью нет
зато есть временные, в которые можно наложить временно данные,
или просто
SELECT "1011010099" AS Number
UNION
SELECT "1011010115"
не знаю как Oracle (но думаю также), а MSSQL полученный таким образом рекордсет может обрабатывать как и "нормальный".


 
ЮЮ ©   (2007-11-29 11:20) [13]

> [11] Andrey ©   (29.11.07 10:43)

> (ибо если есть - тривиальный лефт джоин).


Чего флудить то в чужой ветке. Создай свою, коль интересно.

Для нахождения первого значения в "дыре" тот же Left JOIN:
SELECT a.Person + 1
 FROM
   Job a
   LEFT JOIN  Job b ON a.Person + 1 = b.Person
 WHERE b.Person IS NULL

А так - можно найти диапазоны:

SELECT a.Person + 1, MIN(b.Person) - 1
 FROM
   Job a
   JOIN  Job b ON a.Person < b.Person
 GROUP BY a.Person
 HAVING  MIN(b.Person) - a.Person > 1
 ORDER BY 1


 
Кщд ©   (2007-11-29 12:41) [14]


> Хм............. долго думал, не придумал.

вариант, предложенный в [12] действительно реализуем в Oracle :)
но в Oracle через магическую dual можно и развернуть таблицу с полной последовательностью


 
sniknik ©   (2007-11-29 13:21) [15]

> и развернуть таблицу с полной последовательностью
так нему и не нужна полная последовательность, т.е. интервал от сих до сих, а нужен список из задаваемых.
по примеру в 0
"1011011146",
"1011010055",
"1011010082",
....
"1011010171"
три подряд это уже последовательность с возможностью вычислить принцип задания...
и тут видно что номера не последовательные (и даже не просто возрастающие, первое больше всех, а последнее больше остальных приведенных, 2 из 4 с возрастанием... но что это дает? т.е. в общем "разнобой")
полностью последовательные было бы так
"1011011146",
"1011011147",
"1011011148",
....
"1011011171"

т.е. "дыры" искать не надо, надо строить только по тем значениям, что передаются с клиента.


 
Anatoly Podgoretsky ©   (2007-11-29 13:27) [16]

Искать дыры признак плохой проработки проекта и дырка в голове.
Пока из объяснений автора ничего не понятно.



Страницы: 1 вся ветка

Текущий архив: 2007.12.23;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
2-1196088119
Ivolg
2007-11-26 17:41
2007.12.23
Отправка файлов через сокеты


15-1195736070
Кот
2007-11-22 15:54
2007.12.23
css меню


2-1196251452
webpauk
2007-11-28 15:04
2007.12.23
Закрытие приложения


2-1196315820
ryden
2007-11-29 08:57
2007.12.23
проблема с MDI приложением


8-1171369194
bav123
2007-02-13 15:19
2007.12.23
Есть ли примеры графической консоли или как ее лючше написать?