Я хотел бы преобразовать этот SQL запрос в ANSI SQL. У меня возникают проблемы, когда я оборачиваюсь вокруг логики c этого запроса.
Я использую хранилище данных Snowflake, но он не понимает этот запрос из-за оператора 'delete' перед соединением, поэтому я пытаясь сломать это. Насколько я понимаю, столбец с номером строки дает мне порядок от 1 до N на основе метки времени и помещает его в C. Затем C объединяется против себя в строках, отличных от первой строки (на основе идентификатора), и помещается в C1. Затем C1 удаляется из общих данных, что оставляет только первую строку.
Возможно, я неправильно понимаю logi c, но я не привык видеть выражение 'delete' прямо перед соединением. Дайте мне знать, если я правильно понял логи c, или направьте меня в правильном направлении.
Этот запрос был скопирован / вставлен из ЭТОГО stackoverflow вопроса, в котором есть точная ситуация, в которой я нахожусь пытаюсь решить, но в гораздо большем масштабе.
with C as
(
select ID,
row_number() over(order by DT) as rn
from YourTable
)
delete C1
from C as C1
inner join C as C2
on C1.rn = C2.rn-1 and
C1.ID = C2.ID
Специфическая c проблема, которую я пытаюсь решить, заключается в следующем. Давайте предположим, что у меня есть эта таблица. Мне нужно разделить строки по комбинациям первичных ключей (primKey 1 и 2), сохраняя при этом порядок отметок времени.
ID primKey1 primKey2 checkVar1 checkVar2 theTimestamp
100 1 2 302 423 2001-07-13
101 3 6 506 236 2005-10-25
100 1 2 302 423 2002-08-15
101 3 6 506 236 2008-12-05
101 3 6 300 100 2010-06-10
100 1 2 407 309 2005-09-05
100 1 2 302 423 2012-05-09
100 1 2 302 423 2003-07-24
После того, как строки разбиты и отметка времени упорядочена в каждом разделе, мне нужно удалить дубликат Комбинация checkVar (checkVar 1 & 2) строки до следующего изменения. Таким образом, оставив меня с самой ранней уникальной строкой. Строки со звездочками - те, которые необходимо удалить, поскольку они являются дубликатами.
ID primKey1 primKey2 checkVar1 checkVar2 theTimestamp
100 1 2 302 423 2001-07-13
*100 1 2 302 423 2002-08-15
*100 1 2 302 423 2003-07-24
100 1 2 407 309 2005-09-05
100 1 2 302 423 2012-05-09
101 3 6 506 236 2005-10-25
*101 3 6 506 236 2008-12-05
101 3 6 300 100 2010-06-10
Это окончательный результат. Как вы можете видеть для ID = 100, даже если 1-я и 3-я записи одинаковы, комбинация checkVar изменилась между ними, что нормально. Я только удаляю дубликаты, пока значения не изменятся.
ID primKey1 primKey2 checkVar1 checkVar2 theTimestamp
100 1 2 302 423 2001-07-13
100 1 2 407 309 2005-09-05
100 1 2 302 423 2012-05-09
101 3 6 506 236 2005-10-25
101 3 6 300 100 2010-06-10