Я новичок в кодировании в U-SQL / C #.Я застрял в каком-то месте во время работы с окнами / агрегации.
Мои данные выглядят как
Name Date OrderNo Type Balance
one 2018-06-25T04:55:44.0020987Z 1 Drink 15
one 2018-06-25T04:57:44.0020987Z 1 Drink 70
one 2018-06-25T04:59:44.0020987Z 1 Drink 33
one 2018-06-25T04:59:49.0020987Z 1 Drink 25
two 2018-06-25T04:55:44.0020987Z 2 Drink 22
two 2018-06-25T04:57:44.0020987Z 2 Drink 81
two 2018-06-25T04:58:44.0020987Z 2 Drink 33
two 2018-06-25T04:59:44.0020987Z 2 Drink 45
В U-SQL я добавляю уникальный идентификатор, основанный на комбинациях имени, порядкового номера, типа идля сортировки я добавляю еще одну, включая дату.
@files =
EXTRACT
name string,
date DateTime,
type string,
orderno int,
balance int
FROM
@InputFile
USING new JsonExtractor();
@files2 =
SELECT *,
DENSE_RANK() OVER(ORDER BY name,type,orderno,date) AS group_id,
DENSE_RANK() OVER(ORDER BY name,type,orderno) AS id
FROM @files;
Мои данные теперь выглядят так:
Name Date OrderNo Type Balance group_id id
one 2018-06-25T04:55:44.0020987Z 1 Drink 15 1 1
one 2018-06-25T04:57:44.0020987Z 1 Drink 70 2 1
one 2018-06-25T04:59:44.0020987Z 1 Drink 33 3 1
one 2018-06-25T04:59:49.0020987Z 1 Drink 25 4 1
two 2018-06-25T04:55:44.0020987Z 2 Drink 22 5 2
two 2018-06-25T04:57:44.0020987Z 2 Drink 81 6 2
two 2018-06-25T04:58:44.0020987Z 2 Drink 33 7 2
two 2018-06-25T04:59:44.0020987Z 2 Drink 45 8 2
(я добавил только 4 записи на группу, ноих несколько на группу)
Я застрял в определении разницы между последовательными строками в столбце balance в каждой группе .
Ожидаемый результат для части 1:
Name Date OrderNo Type Balance group_id id increase
one 2018-06-25T04:55:44.0020987Z 1 Drink 15 1 1 0
one 2018-06-25T04:57:44.0020987Z 1 Drink 70 2 1 55
one 2018-06-25T04:59:44.0020987Z 1 Drink 33 3 1 -37
one 2018-06-25T04:59:49.0020987Z 1 Drink 25 4 1 -8
two 2018-06-25T04:55:44.0020987Z 2 Drink 22 5 2 0
two 2018-06-25T04:57:44.0020987Z 2 Drink 81 6 2 59
two 2018-06-25T04:58:44.0020987Z 2 Drink 33 7 2 -48
two 2018-06-25T04:59:44.0020987Z 2 Drink 45 8 2 8
Для каждой новой группы (определенной по id) увеличение должно начинаться с нуля.
Я прошел через переполнение стека и увиделфункция запаздывания от transgresql.Я не мог найти эквивалент C #.Это применимо в этом случае?
Любая помощь приветствуется.При необходимости будут предоставлены дополнительные разъяснения.
Обновление: когда я использую CASE, когда мое решение выглядит следующим образом
CURRENT OUTPUT DESIRED OUTPUT
id Balance Increase id Balance Increase
1 15 0 1 15 0
1 70 55 1 70 55
1 33 -37 1 33 -37
1 25 -8 1 25 -8
2 22 "-3" 2 22 "0"
2 81 59 2 81 59
2 33 -48 2 33 -48
2 45 12 2 45 12
Посмотрите на выделенную строку.Столбец увеличения должен начинаться с 0 для каждого идентификатора.
Обновление: мне удалось решить первую часть моего вопроса.Смотрите мой ответ ниже.Вторая часть, которую я выложил ранее, была неправильно опубликована.Я удалил это.