JavaScript: отрицательный lookbehind эквивалент?

Чтобы вычислить сумму field7 в группах записей с одинаковым field4, вы можете использовать оконную функцию SUM(...) OVER(...).

Чтобы просто сохранить одну запись на группу записей, имеющих одинаковые field4, вы можете использовать ROW_NUMBER() во внутреннем запросе и отфильтровывать нежелательные записи во внешнем запросе. Обратите внимание, что вам нужен критерий сортировки , чтобы надежно выбрать, какую запись следует хранить в каждой группе. Я решил использовать field1 (измените его, как вам нужно):

Ваш (псевдо) запрос должен выглядеть следующим образом:

SELECT * FROM (
    SELECT 
        a.field1,
        b.field2,
        c.field3,
        c.field4,
        b.filed5,
        a.field6,
        SUM(d.field7) OVER(PARTITION BY c.field4) sm,
        ROW_NUMBER()  OVER(PARTITION BY c.field4 ORDER BY a.field1) rn,
    FROM
        a 
        INNER JOIN b on a.field1 = b.field1 
        RIGHT JOIN c on b.field2 = c.field3 
        LEFT  JOIN d on d.field3 = a.field1 
    WHERE some conditions
) x
WHERE rn = 1

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

132
задан Andrew Ensley 17 April 2009 в 14:49
поделиться

2 ответа

Использовать

newString = string.replace(/([abcdefg])?m/, function($0,$1){ return $1?$0:'m';});
33
ответ дан 24 November 2019 в 00:09
поделиться

Стратегия Mijoja работает на Ваш конкретный случай, но не в целом:

js>newString = "Fall ball bill balll llama".replace(/(ba)?ll/g,
   function($0,$1){ return $1?$0:"[match]";});
Fa[match] ball bi[match] balll [match]ama

Вот пример, где цель состоит в том, чтобы соответствовать двойному-l, но не, если этому предшествует "ba". Отметьте слово "balll" - истинный lookbehind должен был подавить первые 2 л, но соответствовать 2-й паре. Но путем соответствия первым 2 л и затем игнорирования того соответствия как положительной лжи, regexp механизм проистекает из конца того соответствия и игнорирует любые символы в положительной лжи.

41
ответ дан 24 November 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: