У меня есть огромное количество данных, поступающих из источника, и каждая запись имеет размер dim1. Dim1 может иметь до 1 миллиона уникальных значений. У некоторых из них будет много данных, а у некоторых будет меньше. Напр. Dim1value1 может иметь 100K записей, Dim1value2 может иметь 1 миллион записей, Dim1value3 может иметь 10 записей и т. Д.Данные Partiton в 20 приблизительно равных разделах в SQL Server
Теперь я хочу сгруппировать их в несколько равные разделы, поэтому данные, связанные с каждым Dim1, войдут в одну группу, и я хочу создать около 20 несколько одинаковых групп.
В основном каждая запись, имеющая Dim1Value1, должна входить в одну группу и так далее. Вот скрипт, который показывает, как ntile этого не делает.
IF OBJECT_ID('tempdb.dbo.#t') IS NOT NULL
DROP TABLE #t
CREATE TABLE #t
(
Dim1 varchar(100),
numberofrecs int
)
DECLARE @counter int = 1
WHILE(@counter < = 100)
BEGIN
INSERT #t
SELECT
'Dim1value' + CAST(@counter AS VARCHAR(10)),
CAST(RAND() * 100 AS INT)
SET @counter = @counter + 1
END
SELECT * FROM #t
SELECT
NTILE(5) OVER(order by numberofrecs),
Dim1, *
FROM #t
Это mysql или sql-сервер? обновить теги и сохранить только соответствующего поставщика. – Dekel
Если SQL Server считает NTile() https://msdn.microsoft.com/en-us/library/ms175126.aspx –
Я не думаю, что это сделает ntile. Я это рассмотрел, но он просто сортирует меру и затем делит мое измерение на n количество групп. в основном он поместит все размеры, которые имеют наибольшее количество в той же группе. это не то, что я хочу ... этот sql-скрипт будет демонострировать его ... –