У меня есть таблица с 3-х столбцов (отсортированных по первым двум):SQL-комплекс группировка «в колонке»
- буквенных
- количество (сортированных для каждой буквы)
- разность между текущим номером и предыдущий номер одного и того же письма
Я хотел бы, чтобы вычислить (с vanlla SQL) в четвертого нового столбца РЕЗУЛЬТАТ группировать эти данные, когда третий столбец (разность NUM между записями contiguos; i.e # 2 -> 4 = 5-1) больше 30, отмечая все записи этого интервала буквенным номером первой записи (например, A1 для # 1, # 2, # 3).
Поскольку разница между номерами контусов имеет смысл только для записей с одной и той же буквой, для первой записи новой буквы значение differnce равно 31 (это означает, что это новая группа, т. Е. # 6).
Вот что я хотел бы получить в результате:
# Letter Number Difference RESULT (new column)
1 A 1 1 A1
2 A 5 4 A1
3 A 7 2 A1
4 A 40 33 A40 (*)
5 A 43 3 A40
6 B 1 31 B1 (*)
7 B 25 24 B1
8 B 27 2 B1
9 B 70 43 B70 (*)
10 B 75 5 B70
Теперь я могу найти только «Breaking значения» (*) с этим запросом, где они получают значение 1:
select letter
,number
,cast(difference/30 as int) break
from table
where cast(difference/30 as int) = 1
Несмотря на то, что я могу найти эти нарушения, я не могу закончить свою задачу.
Может ли кто-нибудь помочь мне найти способ получить столбец RESULT?
Заранее спасибо
FF
Какие СУБД вы используете? Postgres? Oracle? –
Я использую Spark Sql (https://spark.apache.org/docs/latest/sql-programming-guide.html), поэтому мне нужен «самый стандартный» SQL, поскольку большинство конструкций «третьей стороны» недоступен. –