powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sample 1000 записей для каждого месяца
19 сообщений из 19, страница 1 из 1
sample 1000 записей для каждого месяца
    #39265510
simple_sample
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица в нем поле с датой. Мне нужен запрос который который выдаст некий sample, чтобы было макисимум 1000 записей для каждого месяца. Поискал не нашёл, можно пример или ссылку куда копать?
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265518
Casper_ora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
simple_sample,

Код: plsql
1.
2.
rownum<=100 и 
between to_date trunc(('dd.mm.yyyy'........),'DD.MM')


если не ошибаюсь с trunc )
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265527
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simple_sample,

Типа так?
Код: plsql
1.
2.
with r as (select t.*, сount(1) over (partition by trunc(t.date, 'mm') order by rowid) as cnt from t)
select * from t where cnt<1000
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265556
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egoрsimple_sample,

Типа так?
Код: plsql
1.
2.
with r as (select t.*, сount(1) over (partition by trunc(t.date, 'mm') order by rowid) as cnt from t)
select * from t where cnt<1000



Если Sample то order by dbms_random.value тогда.
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265561
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora601Если Sample то order by dbms_random.value тогда.для "некий sample" и rowid сойдет. в нем буковок меньше :))
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265563
simple_sample
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Egoрsimple_sample,

Типа так?
Код: plsql
1.
2.
with r as (select t.*, сount(1) over (partition by trunc(t.date, 'mm') order by rowid) as cnt from t)
select * from t where cnt<1000



неее, так он помоему выдаст все месяцы у которых было меньше тысячи. А надо sample всех месяцов , для каждого месяца максимум 1000 записей

Вот критерий этого запроса:

select trunc(date,'MM'),coun(t)
from (
--здеся запрос который выбирает sample (который мне нужен)
)
group by trunc(date,'MM')
order by 1

01.06.2016 1000
01.05.2016 1000
01.04.2016 878 --нашлось мало
--нету мартовски ваще
01.02.2016 1000
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265568
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simple_sample,

проверьте действие выражения сount-over- order-by
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265571
Туплю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почти так?
Код: plsql
1.
2.
3.
with r as (select t.*, 
                  ROW_NUMBER(1) OVER (PARTITION BY trunc(t.date, 'mm') ORDER BY 1) AS RN from t)
select * from t where RN<1000
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265647
simple_sample
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Egoрsimple_sample,

проверьте действие выражения сount-over- order-by

Код: plsql
1.
2.
3.
4.
5.
with t as(
SELECT sysdate-level d FROM dual CONNECT BY level < 1000 
),
r as (select t.*, сount(1) OVER (PARTITION BY trunc(t.d, 'mm') ORDER BY rowid) AS cnt from t)
select * from r where cnt<1000



пишет что count инвалид идентифайер. где я что забыл?
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265652
dtdt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
simple_sample,

Код: plsql
1.
select trunc(sysdate,'MM')+mod(rownum,20)+rownum/5/24/60 dt from dual connect by level <= 1000
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265658
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simple_sampleEgoрsimple_sample,

проверьте действие выражения сount-over- order-by

Код: plsql
1.
2.
3.
4.
5.
with t as(
SELECT sysdate-level d FROM dual CONNECT BY level < 1000 
),
r as (select t.*, сount(1) OVER (PARTITION BY trunc(t.d, 'mm') ORDER BY rowid) AS cnt from t)
select * from r where cnt<1000



пишет что count инвалид идентифайер. где я что забыл?
( для начала ) раскладку переключить забыл
select dump(' с ount ') from dual;
Typ=96 Len=6: 241,111,117,110,116,32
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265668
simple_sample
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
orawish, спасибо! с русским языком разобрался. Но тесткейс у меня не взлетает:(



Код: plsql
1.
2.
3.
4.
5.
6.
7.
with t as(
SELECT sysdate-level d FROM dual CONNECT BY level < 1000 
),
r as (select t.*, count(1) OVER (PARTITION BY trunc(t.d, 'mm') ORDER BY rowid) AS cnt from t)
select * from r where cnt<1000

ORA-01446: cannot select ROWID from, or sample, a view with DISTINCT, GROUP BY, etc.
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265675
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simple_sample,

тут можно rowid заменить на d
или взять пример от "Туплю"
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265683
simple_sample
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Egoр,
всем спасибо! рабочий вариант:
Код: plsql
1.
2.
3.
4.
5.
6.
with t as(
SELECT sysdate-level d FROM dual CONNECT BY level < 1000 
),
r as (select t.*, count(1) OVER (PARTITION BY trunc(t.d, 'mm') ORDER BY d) AS cnt from t)
select * from r where cnt<=10
order by d desc
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265793
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simple_sampleрабочий вариант:
Код: plsql
1.
2.
3.
4.
5.
6.
with t as(
SELECT sysdate-level d FROM dual CONNECT BY level < 1000 
),
r as (select t.*, count(1) OVER (PARTITION BY trunc(t.d, 'mm') ORDER BY d) AS cnt from t)
select * from r where cnt<=10
order by d desc

ввиду альтернативно-одаренного способа нумерации может выдать более 1000 строк.
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265892
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

Что я тут не заметил?
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39265902
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-simple_sampleрабочий вариант:
Код: plsql
1.
2.
3.
4.
5.
6.
with t as(
SELECT sysdate-level d FROM dual CONNECT BY level < 1000 
),
r as (select t.*, count(1) OVER (PARTITION BY trunc(t.d, 'mm') ORDER BY d) AS cnt from t)
select * from r where cnt<=10
order by d desc

ввиду альтернативно-одаренного способа нумерации может выдать более 1000 строк.

Может ничего не выдать если есть одинаковые данные в d.
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39266374
simple_sample
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи, посоветуйте как тогда сделать чтоб выдавало нормально при любых данных?
Ещё раз суть задачи: для таблицы найти sample, чтобы попадали рандомно в него записи с каждого месяца ( для каждого месяца максимум 1000 записей).
...
Рейтинг: 0 / 0
sample 1000 записей для каждого месяца
    #39266413
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simple_sample,

было уже ж 19354851 order by dbms_random.value
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sample 1000 записей для каждого месяца
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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