powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
25 сообщений из 27, страница 1 из 2
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36555887
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!

Есть в бд таблица с номерами документов. У таблицы есть поля:
RecID - ид. д-та
DocNumber - порядковый номер по типу документа (т.е. на каждый тип - своя нумерация от 1), проставляемый вручную при регистрации
DocDate - дата регистрации д-та
...

Мне надо сделать выборку за определенный день и кроме номера, внесенного вручную, получать "глобальный" номер документа в пределах года. Этот "глобальный" номер это физический порядковый номер документа в таблице, приобретаемый по мере добавления в таблицу, т.е. независимо от типа д-та. Т.е. получается это что-то типа RecID, но RecID ясен красен не подходит.
В вфп есть функция Recno() - это то, что мне и надо. Только проблема в том, что мне нужны отчеты по дням, поэтому для получения глобального номера мне нужно делать запрос на весь год на все типы документов и тогда юзать Recno(), а это слишком много лишней инфы. Либо в 2 запроса - первый выборка за год только идентификаторов всех документов ради использования Recno(), затем уже полностью необходимые данные за интересующий день, затем какое-то объединение или скан с риплейсом и т.д.

А можно ли как-то, используя чистый SQL, за один запрос это сделать? Вот даже не знаю функции, которая бы такое могла сделать - Count -подсчитывает кол-во, а Sum-суммирует...

спасибо
вфп9+мускул
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556169
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KO
номер это физический порядковый номер документа в таблице, приобретаемый по мере добавления в таблицу, т.е. независимо от типа д-та


убил ты меня дорогой,
это ктож тебе такое насоветовал?

сходи в профильный форум почитай историю
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556190
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KO,

Ничего не понял, но если SQL-сервак - Oracle или MS SQL то может поможет аналитика, такая как row_number, rank, dense_rank.
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556194
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну-ка еще раз:

чем тебя примарикей записи в таблице заголовков(идентификаторов)
документов не устроил
(т.е. уникальный ключь, сгенерированный сервером)?

почему ты считаешь, что у записей должен быть какой-то их номер
(физич.номер следования)?

почему отсутствие физич.номера следования на что-то влияет?
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556200
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadCTAC-KO,

Ничего не понял, но если SQL-сервак - Oracle или MS SQL то может поможет аналитика, такая как row_number, rank, dense_rank.


у него мускуль,

человек уверовался в бесплатности
и необходимости именно мускуля

а бесплатный сыр от билли не желает,
хотя причины нежелания явно необоснованны
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556219
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если уж брать бесплатное, то я бы взял Oracle 10g XE.
Вот ссылка как Oracle-вый row_number() сделать на MySqL.
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556228
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadЕсли уж брать бесплатное, то я бы взял Oracle 10g XE.
Вот ссылка как Oracle-вый row_number() сделать на MySqL.

а я-бы взял express от билла,
и не знал хлопот.

родной сервер для родного клиента ближе.

но вопрос не в этом.
у вопрошавшего проблема
в применении устоявшегося способа
определять номер записи и производить какую-то привязку к
такому номеру в родных таблицах
и переносу такого-же приема(способа) к некоторым объектам БД сервера.
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556237
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadЕсли уж брать бесплатное, то я бы взял Oracle 10g XE.
Вот ссылка как Oracle-вый row_number() сделать на MySqL.

можно для тупого,
Вы о каком физическом номере
записей для сервера ведете речь?

Вы ведете речь о номере в выборке? или все-же
хранимом(получаемом) всегда
явном физическом номере?????
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556284
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимоAmKadЕсли уж брать бесплатное, то я бы взял Oracle 10g XE.
Вот ссылка как Oracle-вый row_number() сделать на MySqL.

можно для тупого,
Вы о каком физическом номере
записей для сервера ведете речь?

Вы ведете речь о номере в выборке? или все-же
хранимом(получаемом) всегда
явном физическом номере?????
Точно не знаю, это ли нужно автору, но что я имел в виду продемонстрирую на примере.
id - первичный ключ (суррогат)
tip - тип документа
dt - дата проведения (регистрации)
id tip dt1 1 22.03.2010 17:51:432 1 17.03.2010 17:51:433 1 31.03.2010 17:51:434 4 22.03.2010 17:51:435 4 12.03.2010 17:51:436 4 17.03.2010 17:51:437 5 05.02.2010 17:51:438 5 22.03.2010 17:51:43
Запрос
Код: plaintext
1.
2.
3.
4.
select s.*,
row_number() over (partition by tip order by dt asc) rn_by_type,
row_number() over (                 order by dt asc) rn_global
from s
order by tip, dt
вернет
id tip dt rn_by_type rn_global2 1 17.03.2010 17:52:42 1 41 1 22.03.2010 17:52:42 2 63 1 31.03.2010 17:52:42 3 85 4 12.03.2010 17:52:42 1 26 4 17.03.2010 17:52:42 2 34 4 22.03.2010 17:52:42 3 77 5 05.02.2010 17:52:42 1 18 5 22.03.2010 17:52:42 2 5
где rn_by_type порядковый номер документа при сотрировке по дате в пределах типа
rn_global - глобальный порядковый номер документа при сотрировке по датам по всем типам документов
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556309
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

P.S. SQL-синтаксис - ораколовый.
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556402
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: прошелмимо
> Вы ведете речь о номере в выборке? или все-же
> хранимом(получаемом) всегда
> явном физическом номере?????

Насколько я понял автора, ему нужна "бездырочная нумерация документов", но он считает, что сервер БД сам знает когда и
что ему нумеровать

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556543
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KO
В вфп есть функция Recno() - это то, что мне и надо. Только проблема в том, что мне нужны отчеты по дням, поэтому для получения глобального номера мне нужно делать запрос на весь год на все типы документов и тогда юзать Recno(), а это слишком много лишней инфы. Либо в 2 запроса - первый выборка за год только идентификаторов всех документов ради использования Recno(), затем уже полностью необходимые данные за интересующий день, затем какое-то объединение или скан с риплейсом и т.д.

Мне кажется если достаточно хорошо знать возможности используемой СУБД - в данном случае MySql, то всех этих трудоемких танцев с бубнами можно избежать. Такое мнение у меня сложилось в рез-те более усердного изучения СУБД Oracle после определенного опыта работы в связке FoxPro + Oracle.
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556548
итого имеем:
у сервера нет такого понятие
как номер записи
row_number() не имеет никакого
отношения к номеру записи в таблице.
это нумер-я записей в какой-то упорядоченном
отборе, но никак ни физич.номер записи подобныц
фоксовому.
у автора проблема с архитектурой.
при построении хранилища на сервере
не учитывают никакого физич.следования
в том смысле-контексте о котором ведет речь автор топика.
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556569
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Речь идет о входящих документах. В зависимости от типа входящего документа ему чел (или писюк) присваивает определенный номер. (Меня он как бы не интересует.)
Например, для жалоб - одна нумерация, для предложений - другая, для заявлений - третья, и т.д. и каждый тип имеет независимую нумерацию начиная от 1.
Все эти документы попадают в одну таблицу.
В этой таблице каждой записи сервером присваивается RecID, естественно он присваивается в порядке попадания записей в эту таблицу.
Для отчета мне нужен именно этот общий порядковый номер каждого входящего документа, но нельзя использовать RecID, т.к. мб удаленные записи, т.е. нужна как тут правильно сказали "бездырочная" нумерация.
Отчеты нужны за 1 день.
Допустим мне нужен отчет за позавчера, допустим их тогда было зарегано 10 шт. Допустим в таблице 2100 записей: за текущий год - 100, и 2000 - это записи за прошлый год. Мне нужна соотв. глобальная нумерация за текущий год - это от 1 до 100, а не 1 до 2100 как получается в RecID в идеале. Т.е. по текущему году я выбираю 10 записей из 100, которые хз где в пределах этой сотни, как же мне узнать какие будут глобальные порядковые номера (т.е. без какой-либо сортировки) у этих 10 записей по отношению к 100 за текущий год из общего кол-ва записей 2100 с дырявым RecID? Будут ли это с 52 по 61 или с 64 по 73? хз.
А вот оно-то мне и нужно.
row_number - это вроде оно. спасибо, буду разбираться и пробовать.
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556601
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, даже Recno() в FoxPro тебе не подошло бы. Ведь могут быть и записи помеченные как удаленные. Т.е. Recno() со сдвигом?

Проще всего сделать следующее:

1. Делаешь выборку за нужный период, упорядочивая по RecId.

Здесь исходим из предположения, что RecId записи созданной позднее будет иметь бОльшее значение.

Код: plaintext
1.
2.
3.
4.
select RecId, DocNumber, DocDate, ... 
into Cursor curResult
from MyTab 
where DocDate between _FromDate and _ToDate
order by RecId

2. В этой выборке находишь минимальное значение RecId. Поскольку записи упорядочены по возрастанию RecId, то это будет самая первая запись выборки

Код: plaintext
1.
2.
select curResult
go top
minRecId = curResult.RecId

3. Подсчитываешь общее количество записей в исходной таблице со значением RecId меньше, чем найденное минимальное значение

Код: plaintext
1.
2.
select count(*) as kol 
into cursor curKol
from MyTab where RecId < minRecId

4. Теперь остается только в первоначальной выборке обновить содержимое поля RecId значением recno() со сдвигом на найденное количесво записей

Код: plaintext
1.
select curResult
replace all RecId with recno() + curKol.Kol

Получили "физическую" нумерацию "с начала времен".

Хотя, разумеется, это все ерунда. Ведь старые записи могут быть удалены. Снова пересчитывать "порядковый номер"?
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556636
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, старые записи не удаляются. это как журнал входящей корреспонденции - раз уже внесли то не удаляем. но мб исключения, например, пока регали жалобу и уже зарегали - тело передумало ее подавать и отзывает. мб просто ошибочно введенный дубликат и др. Удаленные записи могут иметь место, но их не будет много, они больше как исключение.
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556640
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то что можно это сделать в несколько проходов - это понятно с самого начала.
может ли это быть получено одною SQL-командой, вот в чем вопрос!
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556869
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KO,
а всё-таки что не позволяет сделать это несколькими командами?
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36556978
quxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CTAC-KO
Все эти документы попадают в одну таблицу.
В этой таблице каждой записи сервером присваивается RecID, естественно он присваивается в порядке попадания записей в эту таблицу.
Для отчета мне нужен именно этот общий порядковый номер каждого входящего документа, но нельзя использовать RecID, т.к. мб удаленные записи, т.е. нужна как тут правильно сказали "бездырочная" нумерация.

Код: plaintext
row_number() over( order by RecID) 
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36557049
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quxix
Код: plaintext
row_number() over( order by RecID) 
не-а - прошелмимоу него мускуль
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36557066
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да все нормально и за несколько подходов. думал может есть возможность за раз все сделать.
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36557380
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: CTAC-KO
> да все нормально и за несколько подходов. думал может есть возможность за раз все сделать.

За раз это делается, когда эта нумерация ведётся при повседневной работе, т.е. поступил документ и его нужно
регистрировать - выдали номер и записали его в отдельное, специальное поле в таблице, удалили документ(хоть и редко, но
бывает) - пересчитали номера и обновили данные в специальном поле. И тогда выборка делается действительно "за раз"
простым селектом :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36557471
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOВ вфп есть функция Recno() - это то, что мне и надо.
В SQL серверах нет понятия "номер записи", так как такого понятия нет в стандарте SQL.
поэтому все попытки получить запись номер X, следующую, предыдущую и т.п. приводят к извращениям в запросах.

Поэтому либо извращаться, либо заводить поле с номером записи и следить за его актуальностью.
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36557595
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да это все понятно. Но такая нумерация нужна больше как дополнительная фича, к тому же и не очень востребованная, а ради этого париться и закладывать обработку общего номера - нет времени и желания. Нет возможности на раз, будем делать за 2. В любом случае это непринципиально, просто интересно было. А теперь все ясно и понятно.
Всем - спасибо!
...
Рейтинг: 0 / 0
Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
    #36558133
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели так трудно самому подумать? Все же уже было сказано. Если MySQL поддерживает подзапросы, то

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select
	(select count(*) from MyTab as MyTab2 where MyTab2.RecId <= MyTab.RecId) as Num,
	DocNumber,
	DocDate
from MyTab
where DocDate between _fromDate and _toDate
order by RecId

Только вот, сколько времени будет выполняться подобный запрос?
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как-то можно выбрать часть записей с их порядковыми номерами с SQL-сервака?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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