Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Генерация данных  [new]
Максим Сысоев
Member

Откуда:
Сообщений: 26
Как сгенерировать 100 000 записей у поля purchase_datetime по принципу:

- 1/3 записей purchase_datetime в 2017 году (распределите записи в течение года более-менее равномерно);
- 1/3 записей purchase_datetime в 2019 году (распределите записи в течение года более-менее равномерно);
- 1/3 записей purchase_datetime в 2020 году (распределите записи в течение года более-менее равномерно);

Я сделал запрос и сгенерировал 100 000 записей, но по одному условию за 2017 год.
Как сделать по всем трём условиям?

create table if not exists sold_car_service
as select
generate_series(1,100000) as id,
md5(random()::text)::char(17) as car_vin_code,
(random() * 18 + 1)::int as car_model_id,
('2017-01-03'::date - interval '2 day' + interval '12 month' * random())::date as purchase_datetime;
SELECT 100000;

alter table sold_car_service add primary key (id);
alter table sold_car_service ADD FOREIGN KEY (car_model_id) references products(id) ON DELETE CASCADE;

select * from sold_car_service;

Сообщение было отредактировано: 10 июн 21, 23:53
10 июн 21, 23:58    [22334140]     Ответить | Цитировать Сообщить модератору
 Re: Генерация данных  [new]
gav21
Member

Откуда:
Сообщений: 119
Максим Сысоев,
может CASE + деление с остатком?
как то так например
select
id,
md5(random()::text)::char(17) as car_vin_code,
(random() * 18 + 1)::int as car_model_id,
case
when id % 3 = 0 then ('2017-01-03'::date - interval '2 day' + interval '12 month' * random())::date
when id % 3 = 1 then ('2019-01-03'::date - interval '2 day' + interval '12 month' * random())::date
when id % 3 = 2 then ('2020-01-03'::date - interval '2 day' + interval '12 month' * random())::date
end as purchase_datetime
from generate_series(1,100000) as id
order by purchase_datetime;
11 июн 21, 12:04    [22334294]     Ответить | Цитировать Сообщить модератору
 Re: Генерация данных  [new]
Максим Сысоев
Member

Откуда:
Сообщений: 26
gav21,

Сойдет!
Спасибо, респект и уважуха!
11 июн 21, 19:00    [22334552]     Ответить | Цитировать Сообщить модератору
 Re: Генерация данных  [new]
Максим Сысоев
Member

Откуда:
Сообщений: 26
gav21,

Я не силен в продвинутом sql, поэтому не владею навыками генерации таких последовательностей.
Еще как можно для поля buyer_name сгенерировать Buyer1, Buyer2, Buyer3....? возможны повторения
11 июн 21, 19:33    [22334556]     Ответить | Цитировать Сообщить модератору
 Re: Генерация данных  [new]
Максим Сысоев
Member

Откуда:
Сообщений: 26
gav21,
сгенерировал 'Buyer' || ((random() * 21 + 22)::int) as buyer_name - конкатенация строк
11 июн 21, 20:36    [22334571]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить