Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопросы новичка. Реализация общего ID для группы с общим значением  [new]
Liet-Kynes
Member

Откуда:
Сообщений: 4
Добрый день, Друзья.

Подскажите пожалуйста, каким запросом реализовать следующий вывод.

Первоначально имеем таблицу:

datetime number
01.01.2000 13:10 1
01.01.2000 13:10 1
01.01.2000 13:15 1
01.01.2000 13:15 1

В итоге нам нужно получить следующий вывод:


datetime number ID
01.01.2000 13:10 1 1
01.01.2000 13:10 2 1
01.01.2000 13:15 1 2
01.01.2000 13:15 4 2

После чего увеличивать ID с каждой новой записью группы данных. Учитывая что для всех записей, выгруженных в одно и тоже время, должен быть общий ID?
22 янв 19, 20:54    [21791560]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы новичка. Реализация общего ID для группы с общим значением  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7754
Liet-Kynes,

DENSE_RANK ()
22 янв 19, 22:04    [21791605]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы новичка. Реализация общего ID для группы с общим значением  [new]
Liet-Kynes
Member

Откуда:
Сообщений: 4
К сожалению метод DENSE_RANK () так как речь идет о динамической таблице, в которую постоянно будут поступать новые данные и каждой выгрузке данных нам необходимо добавлять в поле id значение +1
23 янв 19, 13:02    [21792014]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы новичка. Реализация общего ID для группы с общим значением  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7754
Liet-Kynes,

ну так нормализуйте, добавьте таблицу журнала загрузок, реорганизуйте процесс загрузки.
23 янв 19, 13:15    [21792030]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы новичка. Реализация общего ID для группы с общим значением  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20524
Liet-Kynes, а зачем вообще вы храните поле, значение которого элементарно вычисляется из других данных? вот как раз тем самым DENSE_RANK(). Получайте его в запросе, когда понадобится...
23 янв 19, 13:51    [21792087]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы новичка. Реализация общего ID для группы с общим значением  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Liet-Kynes,

Делаете таблицу с primary key id автоинкрементным и уникальными значениями [datetime]. Вставляете в таблицу и пишете number = -1. Берете вставленный кусок, группируете group by [datetime], получаете новые значения - 4,5,6. Делаете update куска таблицы.

// таки можно написать кошерный merge, но зачем

insert into new_table ([datetime])
select t1.[datetime] // only new datetime from table
from
(
select [datetime] from table
where [number] = -1 // default for insert
group by [datetime]
)
left join new_table t2 on t1.[datetime] = t2.[datetime]
where t2.[datetime] is null


update t1
set
   [number] = t2.[number] // autoincrement
from table t1
inner join new_table t2 on t1.[datetime] = t2.[datetime]
where t1.[number] = -1
23 янв 19, 14:03    [21792106]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы новичка. Реализация общего ID для группы с общим значением  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Andy_OLAP,

В одном месте пропустил t1, чтобы не было желания сделать бездумно копи-паст.
23 янв 19, 14:04    [21792107]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы новичка. Реализация общего ID для группы с общим значением  [new]
Liet-Kynes
Member

Откуда:
Сообщений: 4
А нельзя ли при вызрузке данных из таблицы t1, взять max(id) из таблицы т2 и к ней прибавить единицу перед записью данных в таблицу t2?
24 янв 19, 09:18    [21792869]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы новичка. Реализация общего ID для группы с общим значением  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7754
Liet-Kynes,

а если два процесса будут добавлять?
24 янв 19, 10:53    [21793027]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы новичка. Реализация общего ID для группы с общим значением  [new]
Liet-Kynes
Member

Откуда:
Сообщений: 4
Владислав Колосов

В этом случае можно блокировать таблицу, если с ней выполняются какие-либо операции?
24 янв 19, 11:46    [21793109]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы новичка. Реализация общего ID для группы с общим значением  [new]
msLex
Member

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

В одном месте пропустил t1, чтобы не было желания сделать бездумно копи-паст.

Какое коварство
24 янв 19, 12:14    [21793157]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы новичка. Реализация общего ID для группы с общим значением  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
msLex
Andy_OLAP
Andy_OLAP,

В одном месте пропустил t1, чтобы не было желания сделать бездумно копи-паст.

Какое коварство

Ой-вей, Вы такой суровый термин употребляете. Но в целом соглашусь, меня даже коллеги по работе называют за глаза "канцлером Палпатином". Коварство - это метод обучения ленивых.
24 янв 19, 12:27    [21793184]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить