Я запрашиваю набор данных из ~ 15 миллионов записей в SQL.Сложная группировка в SQL
Я сгруппировал и отсортировал данные так, чтобы это выглядело.
TruckID RoadID Date Time I want this
Truck1 200 22-Jan-15 9:33:01 AM 1
Truck1 200 22-Jan-15 9:34:18 AM 1
Truck1 200 22-Jan-15 11:10:56 AM 2
Truck1 200 22-Jan-15 11:11:30 AM 2
Truck12 150 22-Jan-15 5:41:45 PM 1
Truck12 150 22-Jan-15 5:41:55 PM 1
Truck12 150 22-Jan-15 11:03:01 PM 2
Truck12 150 22-Jan-15 11:03:41 PM 2
Truck12 150 22-Jan-15 11:45:37 PM 3
Truck16 330 22-Jan-15 2:18:22 AM 1
Truck16 330 22-Jan-15 2:35:25 AM 2
Truck16 330 22-Jan-15 2:35:50 AM 2
Truck2 500 22-Jan-15 10:00:12 AM 1
Truck2 500 22-Jan-15 10:00:22 AM 1
Truck2 500 22-Jan-15 10:35:55 AM 2
Truck7 10 22-Jan-15 7:15:08 AM 1
Truck7 10 22-Jan-15 7:15:45 AM 1
Truck7 10 22-Jan-15 11:10:56 AM 2
Truck8 20 22-Jan-15 1:15:07 PM 1
Truck8 20 22-Jan-15 1:16:07 PM 1
Truck8 20 22-Jan-15 1:55:10 PM 2
Truck8 20 22-Jan-15 1:55:10 PM 2
Я хочу знать, если есть способ в SQL для создания значения в I want this
поле. Логика заключается в том, что если в поле для одного и того же идентификатора TruckID на одном и том же идентификаторе дороги имеется более чем двухминутный (120 секунд) промежуток времени (120 секунд), в поледолжно быть создано новое значение, увеличиваемое на 1, для этого идентификатора TruckID -RoadID-группировка. Спасибо.
Какая СУБД вы используете? –
@a_horse_with_no_name Эти данные на самом деле сидят в Spark RDD. Я хочу использовать контекст SQL Spark специально. – dstar
Может быть проще или эффективнее использовать 'collect_list', а затем' explode' - делать что-то вроде 'groupBy ($" TruckID ", $" RoadID "). Agg (collect_list (struct" $ Date "как" Date ", $" Время "как" Время ")) как" datetimes "). Explode ($" datetimes ") {...}', а затем выполните свою логику в '...'. –