2016-06-01 4 views
1
LAG (RegisterReading,1) OVER (PARTITION BY Mpancore ORDER BY meterserialnumber, MeterRegisterId) as LagFunc 

Кто-нибудь, пожалуйста, помогите. БлагодаряФункция задержки, возвращающая случайное число для первого верхнего ряда

Привет всем, я обновил отчет со всеми ключами добавляется в отчете, я использовал его против met_reg_read и mpan в комбинации раздела, но это не похоже, чтобы получить предыдущий для некоторых из них, как 557 в lag func и lag test.

lagtestlooks нравится эта

LAG (d.RegisterReading,1,0) over (partition by Mpan, met_reg_read order by d.met_reg_read) 

lagfunc без по умолчанию 0

ссылку на новый выход

ответ

6

на этом не является случайным значение. Это значение, которое появляется где-то с тем же значением Mpancore. В этом случае это последнее значение.

Проблема, с которой вы сталкиваетесь, заключается в том, что предложение order by имеет две клавиши, и эти ключи имеют повторяющиеся значения. Следовательно, порядок ключей с одинаковым значением равен произвольный или неопределенный (но не случайный, что имеет другие последствия).

Я не уверен, что вы хотите делать, но я настоятельно рекомендую иметь уникальный набор ключей (поэтому сортировка стабильна). Я думаю, что вы можете сделать это, в том числе RegisterReading:

LAG(RegisterReading, 1) OVER (PARTITION BY Mpancore 
           ORDER BY meterserialnumber, MeterRegisterId, ReadingDateAndTime 
          ) as LagFunc 

Это еще не совершенен, потому что есть еще NULL значения с дубликатами.

+0

Спасибо, Гордон, это сработало для этого конкретного PMancore, но когда я запускаю его против другого образца, я снова получаю ту же проблему. Есть ли способ обойти это, используя ключ, который я привел в примере, чтобы он мог работать для каждого PMancore? Спасибо – abs786123

+1

@ abs786123 - Детерминированные результаты требуют набора полей, которые могут * однозначно идентифицировать каждую строку. Эти поля затем могут использоваться в 'PARTITION BY' и' ORDER BY'. В ваших примерах данных это невозможно; даже если вы укажете все 5 полей, есть несколько строк, которые имеют одинаковые значения. Самое лучшее, что вы собираетесь получить * (для данных, которые вы показали) * - это что-то вроде «PARTITION by MpanCore, MeterIDSerialNumber, MeterRegisterID ORDER BY ReadDateAndTime, RegisterReading'. Если у вас больше полей для использования или вы хотите получить разные результаты, я рекомендую вам обновить свой вопрос более подробно. – MatBailie

+0

Привет, я обновил результаты, чтобы принести все уникальные ключи, все еще есть проблема с появлением 557, когда это не было в чтении регистра. Я пробовал всевозможную комбинацию разделов и порядка, но он все еще показывает что-то другое. Я использовал уникальный ключ met_reg_read, думая, что это решило бы его, но это не так. Любая помощь будет оценена благодарю вас. – abs786123

Смежные вопросы