powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сгруппировать данные и создать xml колонку
25 сообщений из 28, страница 1 из 2
Сгруппировать данные и создать xml колонку
    #39691835
User2155
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет,

есть большая таблица с суммами по дням и очень хочется её сократить в размере.
Для этого хочу оставить только одну запись в месяц на клиента, а обороты запихать в отдельный столбец XML и хранить там.
Код: 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.
drop table if exists #TableA;
CREATE TABLE #TableA (value_day date, customer_id varchar(64), turn decimal(18,4));

INSERT #TableA (value_day, customer_id, turn) VALUES
(DATEFROMPARTS(2018,06,01) ,'customer1',500),
(DATEFROMPARTS(2018,06,02) ,'customer1',0),
(DATEFROMPARTS(2018,06,03) ,'customer1',11),
(DATEFROMPARTS(2018,06,04) ,'customer1',22),
(DATEFROMPARTS(2018,06,05) ,'customer1',33),
(DATEFROMPARTS(2018,06,06) ,'customer1',4),
(DATEFROMPARTS(2018,06,07) ,'customer1',0),
(DATEFROMPARTS(2018,06,08) ,'customer1',0),
(DATEFROMPARTS(2018,06,09) ,'customer1',0),
(DATEFROMPARTS(2018,06,10) ,'customer1',5),

(DATEFROMPARTS(2018,06,01) ,'customer2',6),
(DATEFROMPARTS(2018,06,02) ,'customer2',50),
(DATEFROMPARTS(2018,06,03) ,'customer2',448.55),
(DATEFROMPARTS(2018,06,04) ,'customer2',854.11),
(DATEFROMPARTS(2018,06,05) ,'customer2',59855),
(DATEFROMPARTS(2018,06,06) ,'customer2',45.22),
(DATEFROMPARTS(2018,06,07) ,'customer2',10),
(DATEFROMPARTS(2018,06,08) ,'customer2',0),
(DATEFROMPARTS(2018,06,09) ,'customer2',8),
(DATEFROMPARTS(2018,06,10) ,'customer2',99);
	
select *
from #TableA



В результате должна получится сгруппированная таблица со столбцами:
- дата (конец отчетного месяца). Тип данных - дата.
- клиент (customer1 / customer2). Тип данных - строка.
- обороты по дням. Тип данных - XML.
Например для customer1:
Код: xml
1.
2.
3.
4.
5.
6.
7.
<days>
  <d val="01.06.2018">500</d>
  <d val="02.06.2018">0</d>
  <d val="03.06.2018">11</d>
  ...
  <d val="10.06.2018">5</d>
</days>



Как бы это вывернуть?
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691848
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User2155,

авторочень хочется её сократить в размере.
а в чём вы размер меряете?
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691904
User2155
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там записи по дням на каждый день года.
Я хочу оставить только одну строку на один месяц, а суммы спрятать в XML.
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691906
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User2155Там записи по дням на каждый день года.
Я хочу оставить только одну строку на один месяц, а суммы спрятать в XML.
и в чём профит? Ничего положительного вы не делаете данным желанием
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691907
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKUser2155Там записи по дням на каждый день года.
Я хочу оставить только одну строку на один месяц, а суммы спрятать в XML.
и в чём профит? Ничего положительного вы не делаете данным желаниемПрофит в исключении неприятно большого (для неспециалиста) количества строк.
Неспециалисты думают, что чем меньше строк, тем быстрее и проще. А тем более таблиц, таблицы - это вообще зло, лучше всего одна.
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691916
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

авторПрофит в исключении неприятно большого (для неспециалиста) количества строк.
посмотрел в похожей табличке почти 1 млдр... хай будэ :)
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691923
User2155
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

у меня гораздо больше. Я готов пожертвовать временем (пусть вычисления дольше идут) лишь бы это схлопнуть.
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691925
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User2155TaPaK,

у меня гораздо больше. Я готов пожертвовать временем (пусть вычисления дольше идут) лишь бы это схлопнуть.
так профит в чём от ваших хлопков?
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691926
User2155
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

Таблица меньшего размера.
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691932
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User2155TaPaK,

Таблица меньшего размера. нет
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691934
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User2155TaPaK,

Таблица меньшего размера.Заведите справочник кастомеров, после чего экономии от "хлопанья" не станет.
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691938
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичUser2155TaPaK,

Таблица меньшего размера.Заведите справочник кастомеров, после чего экономии от "хлопанья" не станет.
и прекратить хранить нулевые обороты :)
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691942
User2155
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

думаю да, убрать записи где нулевые обороты будет правильно.
XML в данном случае какой-то кривой вариант.
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691944
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User2155Таблица меньшего размера.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select
 a.value_day, a.customer_id, a.turn, b.x as days_data
into
 #TableB
from
 (select min(value_day), customer_id, sum(turn) from #TableA group by customer_id) a(value_day, customer_id, turn) cross apply
 (select value_day as [@val], turn as [*] from #TableA where customer_id = a.customer_id for xml path('d'), root('days'), type) b(x);

select * from #TableA;
select * from #TableB;

select sum(datalength(value_day) + datalength(customer_id) + datalength(turn)) from #TableA;
select sum(datalength(value_day) + datalength(customer_id) + datalength(turn) + datalength(days_data)) from #TableB;
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691948
User2155
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

жесть. Т.е. новая таблица в три раза больше :-)
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691949
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User2155invm,

жесть. Т.е. новая таблица в три раза больше :-)
Ох... кто вам вообще даверил такие изыскания
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691952
User2155
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

спокойствие, только спокойствие. Я ж не создал эту колонку, а только думал что получится. ))
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39691960
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User2155Всем привет,

есть большая таблица с суммами по дням и очень хочется её сократить в размере .

...

Как бы это вывернуть?

ну, если в размере, то проверьте это:
sp_estimate_data_compression_savings
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39692005
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User2155TaPaK,

думаю да, убрать записи где нулевые обороты будет правильно.
XML в данном случае какой-то кривой вариант.А что, у вас customer_id действительно имеет тип varchar(64), и там названия, или это просто для примера?
Для большой таблицы так делать недопустимо.

А убирать нулевые обороты хоть и очевидно полезное решение для сокращения таблицы, но запросы могут усложниться и замедлиться, придётся же искать ближайшее значение, а не просто джойнить по дате и кастомеру.
Так что нужно это тщательно взвесить.
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39692011
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дык у xml как бы и оверхед немаленький, в xml возможно имеет смысл убирать только в случае если вам приходят в систему данные в xml и оперативный доступ к данным вам попросту не нужен, надо просто сохранить значения в бд на какой-то крайний случай.
у меня такое было, приходила информация в xml и я ее как есть сохранял в БД потому что в нее мне надо было добавить некоторое количество данных и отправить обратно. И чтобы не формировать этот xml по новой я просто брал что пришло ранее и добивал туда нужное после чего отправлял обратно.
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39692189
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К чему такие сложности?
Код: sql
1.
DATEFROMPARTS(2018,06,01)


достаточно половины дозы
Код: sql
1.
'20180601'
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39692392
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди,

на тему оверхеда. поле nvarchar(max) в нем xml. использую встроенные функции COMPRESS/DECOMPRESS.

records_countuncomressed_sizecompressed_sizecompression_prcnt9997920835Mb1555Mb7.46%
про размеры не пинаем, это только один день из всего содержимого
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39692394
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgorэнди,

на тему оверхеда. поле nvarchar(max) в нем xml. использую встроенные функции COMPRESS/DECOMPRESS.

records_countuncomressed_sizecompressed_sizecompression_prcnt9997920835Mb1555Mb7.46%
про размеры не пинаем, это только один день из всего содержимого А если распечатать на бумаге, а записи удалить, то вообще экономия будет места на диске будет потрясающая!
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39692410
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgorполе nvarchar(max) в нем xml. использую встроенные функции COMPRESS/DECOMPRESSВидимо, настоящие джедаи никогда не пользуются типом данных xml.
...
Рейтинг: 0 / 0
Сгруппировать данные и создать xml колонку
    #39692488
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

а что-то отличается от способа его хранения? я что-то пропустил?
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сгруппировать данные и создать xml колонку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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