Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2023, 02:19   #1
multiki
 
Регистрация: 05.05.2013
Сообщений: 7
Лампочка Реализация оконной функции

Доброго времени суток.
Бьюсь над задачкой в которой необходимо для каждой повторяющийся строчки с именем вернуть ее номер в окне этого повторения т.е. если повторение одного из имен прерывается то отсчет начинается заново.
К сожалению row_number() или dense_rank() продолжают прерванную нумерацию каждого имени и я не могу придумать способ сделать нумерацию в каждом отдельном окне повторений.

В дополнение: предположим, что данные в источнике уже отсортированы как необходимо.
Или могут иметь уникальные time_stamp в каждой строчке. Пример необходимого заполнения ниже:

https://www.programmersforum.ru/atta...1&d=1678316760
Изображения
Тип файла: jpg 438B89EF-CF7A-47E5-86D7-7C2E51FB516D.jpg (61.4 Кб, 4 просмотров)

Последний раз редактировалось multiki; 09.03.2023 в 02:22.
multiki вне форума Ответить с цитированием
Старый 09.03.2023, 10:10   #2
Lapita12
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 24
По умолчанию

Код:
SELECT
    name,
    time_stamp,
    ROW_NUMBER() OVER (PARTITION BY name, grp ORDER BY time_stamp) as row_num
FROM (
    SELECT
        name,
        time_stamp,
        DENSE_RANK() OVER (ORDER BY name, grp) as grp
    FROM (
        SELECT
            name,
            time_stamp,
            ROW_NUMBER() OVER (ORDER BY time_stamp) - ROW_NUMBER() OVER (PARTITION BY name ORDER BY time_stamp) as grp
        FROM example
    ) t1
) t2;
Где example - это имя вашей таблицы соответствующая нашим требованиям, и код может быть адаптирован к вашим требованиям для сортировки данных и обработки имен и временных меток.
Lapita12 вне форума Ответить с цитированием
Старый 09.03.2023, 10:14   #3
Lapita12
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 24
По умолчанию

Если же вы хотите код с вашими требованиями то он представлен ниже:
Код:
CREATE TABLE example (
    id int,
    name varchar(50),
    time_stamp timestamp
);

INSERT INTO example VALUES
(1, 'Alice', '2021-01-01 10:00:00'),
(2, 'Alice', '2021-01-01 10:05:00'),
(3, 'Bob', '2021-01-01 10:10:00'),
(4, 'Bob', '2021-01-01 10:15:00'),
(5, 'Bob', '2021-01-01 10:20:00'),
(6, 'Charlie', '2021-01-01 10:25:00'),
(7, 'Charlie', '2021-01-01 10:30:00'),
(8, 'Charlie', '2021-01-01 10:35:00'),
(9, 'David', '2021-01-01 10:40:00'),
(10, 'David', '2021-01-01 10:45:00');

SELECT
    name,
    time_stamp,
    ROW_NUMBER() OVER (PARTITION BY name, grp ORDER BY time_stamp) as row_num
FROM (
    SELECT
        name,
        time_stamp,
        SUM(reset) OVER (ORDER BY time_stamp) as grp
    FROM (
        SELECT
            name,
            time_stamp,
            CASE WHEN LAG(name) OVER (ORDER BY time_stamp) = name THEN 0 ELSE 1 END as reset
        FROM (
            SELECT
                name,
                time_stamp
            FROM example
            ORDER BY name, time_stamp
        ) t1
    ) t2
) t3;

Результат:

name    | time_stamp           | row_num
------- | --------------------| -------
Alice   | 2021-01-01 10:00:00  | 1
Alice   | 2021-01-01 10:05:00  | 2
Bob     | 2021-01-01 10:10:00  | 1
Bob     | 2021-01-01 10:15:00  | 2
Bob     | 2021-01-01 10:20:00  | 3
Charlie | 2021-01-01 10:25:00  | 1
Charlie | 2021-01-01 10:30:00  | 2
Charlie | 2021-01-01 10:35:00  | 3
David   | 2021-01-01 10:40:00  | 1
David   | 2021-01-01 10:45:00  | 2
Lapita12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация функции на ASM Peraings Фриланс 1 03.05.2017 10:34
Реализация функции (C++) KAHT Помощь студентам 0 26.12.2011 14:02
Реализация функции strcat. KOPC1886 Помощь студентам 2 25.01.2011 17:48
Ассемблер. Реализация функции... Vika_M Помощь студентам 4 04.12.2008 17:12