Альтернатива Row_Number над разделом - PullRequest
1 голос
/ 31 марта 2020

У меня есть данные, отформатированные следующим образом:

ID          Agent          AgentState          StateType          StartTime          EndTime
            Smith, Bob     WaitingForCall      Productive         08:00              10:00
            Smith, Bob     OnCall              Productive         10:00              10:30
            Smith, Bob     LoggedOut           NonProductive      10:30              10:45
            Smith, Bob     WaitingForCall      Productive         10:45              11:00
            Smith, Bob     OnCall              Productive         11:00              11:45
            Smith, Bob     OnCall              Productive         11:45              12:15
            Smith, Bob     LoggedOut           NonProductive      12:15              13:15

То, что я хочу сделать sh - это объединение всех временных диапазонов для использования только производительного типа. Таким образом, конечный результат будет:

ID          Agent          StateType          StartTime          EndTime
            Smith, Bob     Productive         08:00              10:30
            Smith, Bob     NonProductive      10:30              10:45
            Smith, Bob     Productive         10:45              12:15
            Smith, Bob     NonProductive      12:15              13:15

В предыдущем задании у меня был доступ к SQL серверам, и я мог выполнить это sh, используя Row_Number Over Partition. Теперь, когда у меня есть доступ только к Excel / Access, мне трудно создать способ "squi sh" данных только для StateType продолжительности. Система, в которой я извлекаю данные, не может быть изменена, поэтому исходный формат также нельзя изменить.

1 Ответ

1 голос
/ 31 марта 2020

Возможно, это не лучший способ go по этому поводу, но он должен работать. Вы, вероятно, можете сделать это как-то в SQL, но я не уверен, как это сделать.

Это предполагает, что ваши данные в порядке, если нет, вам, вероятно, потребуется определить базовый c контейнер. класс для хранения значений до конца.

Для этого потребуется новая таблица с добавленными соответствующими столбцами.

Sub compress()
    Dim db As Database
    Dim rs As Recordset
    Dim employee As String
    Dim state As String
    Dim starting As Date
    Dim ending As Date

    Set db = CurrentDb
    Set rs = db.OpenRecordset("Table1") 'Use real table name


    Dim appendtable As Recordset
    Set appendtable = db.OpenRecordset("Table2") 'Use real table name
    With rs
        .MoveFirst
        employee = ![agent]
        state = ![statetype]
        starting = Format(![starttime], "HH:MM") 'You probably don't need the format
        ending = Format(![endtime], "HH:MM")
        Do Until .EOF
            If employee = ![agent] And state = ![statetype] Then
                ending = Format(![endtime], "HH:MM") 'Track ending times
            Else
                appendtable.AddNew 'Append data
                appendtable![agent] = employee
                appendtable![statetype] = state
                appendtable![starttime] = starting
                appendtable![endtime] = ending
                appendtable.Update

                employee = ![agent] 'Reset Data
                state = ![statetype]
                starting = Format(![starttime], "HH:MM")
                ending = Format(![endtime], "HH:MM")
            End If
            .MoveNext
        Loop
    End With



End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...