Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
16 / 14 / 4
Регистрация: 21.11.2014
Сообщений: 320

Массивы

23.03.2021, 10:40. Показов 5200. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Вот суть проблемы есть два массива с датами:
Oracle 11 SQL
1
2
arrayStartDate := ARRAY(SELECT "StartDate" FROM "AUR_PersonWorkExpirience" WHERE "ClaimId" = claimid::uuid);
arrayEndDate := ARRAY(SELECT "EndDate" FROM "AUR_PersonWorkExpirience" WHERE "ClaimId" = claimid::uuid);
Надо вытащить из обоих массивов год и месяц, но общий, то есть прибавить каждые даты из StartDate bи каждые даты из EndDate, но я в упор непонимаю как работать с масcивом и решить эту проблему я делал с одной StarDate и с одной EndDate

Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
StartDate = (SELECT "StartDate" 
             FROM "AUR_PersonWorkExpirience" 
             WHERE "ClaimId" = claimid::uuid);
 
EndDate = (SELECT "EndDate" 
           FROM "AUR_PersonWorkExpirience"
          WHERE "ClaimId" = claimid::uuid);
          
years = (SELECT EXTRACT(YEAR FROM AGE(EndDate,StartDate)));
 
months = (EXTRACT(MONTH FROM AGE(EndDate,StartDate)));     
 
workExpirience = CONCAT (years , ',' , months);
но как быть с массивом понятия не имею разобрался только как селект делать,а как обработать по тоиже схеме что я делал незнаю, помогите пожалуйста!!!!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.03.2021, 10:40
Ответы с готовыми решениями:

динамические массивы
User: { id: string, firstName: string, lastName: string, books: book } book: { id: string, Autor: string,

Массивы в json
Всем добрый день. Помогите с проблемой... Есть поле geo_obj типа json. В нем тег points, который представляет собой трехмерный массив. ...

Массивы в БД
Поделитесь информацией, пожалуйста. нужны ответы на массивы переменны их описание. Обмен данными с БД и также обработка массивов данных. ...

6
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
23.03.2021, 17:55
Покажите на примере данных, что к чему вы хотите прибавить.
0
16 / 14 / 4
Регистрация: 21.11.2014
Сообщений: 320
23.03.2021, 18:08  [ТС]
ну задача такая есть к примеру даты
23.01.2021 и 23.01.2022
23.01.2021 и 23.01.2023
23.01.2021 и 23.01.2024
23.01.2021 и 23.01.2025

мне надо получить из каждой пары период,если смотреть что я привел как пример даты то между первой парой год,второй два года и так далее и 0 дней получается, ну мне нужно прибавить этот пероид друг к другу, получится 10 лет и 0 месяцев

Добавлено через 1 минуту
и если говорить об одной паре как я сделал выще то можно вычеслить месяца и года
вот так
Oracle 11 SQL
1
2
3
years = (SELECT EXTRACT(YEAR FROM AGE(EndDate,StartDate)));
 
months = (EXTRACT(MONTH FROM AGE(EndDate,StartDate)));
Добавлено через 25 секунд
но я незнаю как это провернуть с целым массивом

Добавлено через 1 минуту
ой простите я там выще написал дней я хотел написать года и месяца

Добавлено через 4 минуты
но есть загвоздка в примере что я написал он с пересечением диапазонов и это выходит слишком большая цифра как еще и это рещить пересечение
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
23.03.2021, 18:12
вот так же можно

SQL
1
2
3
4
5
6
7
SELECT
 SUM(age(d_to::DATE, d_from::DATE))
FROM
unnest(
  array['2021-01-23', '2021-01-23', '2021-01-23', '2021-01-23'],
  array['2022-01-23', '2023-01-23', '2024-01-23', '2025-01-23']
) AS x(d_from, d_to)
1
16 / 14 / 4
Регистрация: 21.11.2014
Сообщений: 320
23.03.2021, 19:10  [ТС]
а как месяца добавить и запихнуть это в таку конструкцию ???
Oracle 11 SQL
1
workExpirience = CONCAT (years , ',' , months);
Добавлено через 2 минуты
хотя с этим ладно разберусь, как быть с пересечением вот сложный вопрос

Добавлено через 7 минут
чтоб вы понимали о чем я, идет речь типа о опыте работы человека и у него опыт с 21 по 25, и это не 10 лет, и надо как то что если пересекаются диапазоны то не брать в счет этот период то есть по идее должно показать 5 лет

Добавлено через 43 минуты
очень надо я никак не врублюсь как сделать с этими диапазонами, если то и решил сам своим способом конченым, ваш куда шикарней за что спасибо говорю но вот помогите еще с диапазонами
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
26.03.2021, 15:09
Лучший ответ Сообщение было отмечено Nightwalker как решение

Решение

Вы много разных тем создали. Все темы вроде вокруг одной и той же проблемы: соединение пересекающихся диапазонов каких-либо величин. На этот счет на просторах Интернета ищется примерно следующий нетривиальный запрос

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
WITH
q1_src AS (
  -- здесь готовим сырые данные (разворачиваем массивы, приводим типы и т.п.)
  -- на выходе q1_src должен получиться набор диапазонов из исходных данных
  SELECT daterange(range_begin, range_end) AS range FROM
  unnest(
    array['2021-01-23'::DATE, '2021-01-23'::DATE, '2021-01-23'::DATE, '2021-01-23'::DATE],
    array['2022-01-23'::DATE, '2023-01-23'::DATE, '2024-01-23'::DATE, '2025-01-23'::DATE]) AS src(range_begin, range_end)),
q2_bounds AS (
  -- здесь определяем границы каждого диапазона
  -- для upper(range) берем max из предыдущих просмотренных записей,
  -- тогда диапазон с меньшим range_end будет покрываться диапазоном с большим range_end
  -- при их упорядочивании по нижней границе
  SELECT
    range,
    LOWER(range) AS range_begin,
    MAX(UPPER(range)) OVER (ORDER BY range) AS range_end
  FROM q1_src),
q3_merge AS (
  -- выставляем специальный флаг, если диапазоны пересекаются и их можно объединить;
  -- всегда берем самую раннюю нижнюю границу (lag), сохраняя порядок следования диапазонов
  SELECT
    range, range_begin, range_end,
    lag(range_end) OVER (ORDER BY range) < range_begin OR NULL AS merge_flag
  FROM q2_bounds),
q4_grp AS (
  -- определяем группы взаимно-непересекающихся диапазонов
  SELECT
    range_begin, range_end,
    COUNT(merge_flag) OVER (ORDER BY range) AS merge_grp
  FROM q3_merge)
SELECT
  daterange(MIN(range_begin), MAX(range_end)) AS range
FROM
  q4_grp
GROUP BY merge_grp
ORDER BY 1;
В результате для ваших данных из примера будет все сгрупиировано в одну группу
Code
1
2
3
4
          range          
-------------------------
 [2021-01-23,2025-01-23)
(1 строка)
Дальше уже можно распарсить диапазон, вычислить из него интервал.
Для несоклькоих диапазонов посчитать сумму интервалов.

И уже не нужно городить много FOR/IF конструкций, все умещается в один запрос.
Плюс запроса также в том, что можно оперировать любыми range типами (даты, целые числа), которые поддерживает postgresql.
1
16 / 14 / 4
Регистрация: 21.11.2014
Сообщений: 320
26.03.2021, 21:10  [ТС]
Спасибо за ответ,да я создавал темы они связаны с этой,но там чиста технические моменты уже с пересечением я забил решил по другому без нахождения пересечений, но спасибо тема закрыта!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.03.2021, 21:10
Помогаю со студенческими работами здесь

Массивы в Access
Всем добрый день! Очень нужна ваша помощь! С VB я не работала очень давно - почти ничего не помню, но появилась необходимость. задача...

Массивы или ArrayList
В PL/SQL блоке производится обработка данных циклом, после каждого прохода цикла нужно запоминать результат? подскажите как их сохранять в...

процедуры ненутрят массивы...
Подскажите чайнику изящный способ сделать массовый insert через stored procedure. В книжке пишут, что все параметры д.б. одинаковой...

Не работают массивы VBA
Здравствуйте форумчане! Беда! Убил уже два часа, перепробовал всё от копипасты с учебников до импровизации, а воз и ныне там... Суть...

JavaScript PHP MySQL массивы
Подскажите как сделать что-то подобное этому:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru