Ich muss eine neue Spalte erstellen, die bei jedem 0-Wert der Spalte Repeated Call jeder Customer_ID neu gestartet wird:

+-------------+---------+----------------------+---------------+
| Customer_ID | Call_ID | Days Since Last Call | Repeated Call |
+-------------+---------+----------------------+---------------+
|           1 |       1 | Null                 |             0 |
|           1 |       2 | 45                   |             0 |
|           1 |       3 | 0                    |             1 |
|           1 |       4 | 0                    |             1 |
|           1 |       5 | 0                    |             1 |
|           1 |       6 | 48                   |             0 |
|           1 |       7 | 1                    |             1 |
|           2 |       8 | Null                 |             0 |
|           2 |       9 | 1                    |             1 |
+-------------+---------+----------------------+---------------+

In so etwas:

+-------------+---------+----------------------+---------------+-------------+
| Customer_ID | Call_ID | Days Since Last Call | Repeated Call | Order_Group |
+-------------+---------+----------------------+---------------+-------------+
|           1 |       1 | Null                 |             0 |           1 |
|           1 |       2 | 45                   |             0 |           2 |
|           1 |       3 | 0                    |             1 |           2 |
|           1 |       4 | 0                    |             1 |           2 |
|           1 |       5 | 0                    |             1 |           2 |
|           1 |       6 | 48                   |             0 |           3 |
|           1 |       7 | 1                    |             1 |           3 |
|           2 |       8 | Null                 |             0 |           1 |
|           2 |       9 | 1                    |             1 |           1 |
+-------------+---------+----------------------+---------------+-------------+

Schätzen Sie Ihren Vorschlag, danke!

1
Dan Pham 18 Aug. 2020 im 22:07

2 Antworten

Beste Antwort

Sie können die Fensterfunktion SUM () verwenden:

select t.*,
  sum(case when Repeated_Call = 0 then 1 else 0 end) 
  over (partition by Customer_ID order by Call_Id) Order_Group 
from tablename t

Siehe die Demo (für MySql, aber es ist Standard-SQL).
Ergebnisse:

| Customer_ID | Call_ID | Days Since Last Call | Repeated_Call | Order_Group |
| ----------- | ------- | -------------------- | ------------- | ----------- |
| 1           | 1       |                      | 0             | 1           |
| 1           | 2       | 45                   | 0             | 2           |
| 1           | 3       | 0                    | 1             | 2           |
| 1           | 4       | 0                    | 1             | 2           |
| 1           | 5       | 0                    | 1             | 2           |
| 1           | 6       | 48                   | 0             | 3           |
| 1           | 7       | 1                    | 1             | 3           |
| 2           | 8       |                      | 0             | 1           |
| 2           | 9       | 1                    | 1             | 1           |
2
forpas 18 Aug. 2020 im 19:24

Sie können jeden 0-Wert in der Spalte Wiederholter Anruf (für jeden Kunden) mithilfe der Fensteranalysefunktion COUNT mit ROWS UNBOUNDED PRECEDING berechnen:

SELECT *, 
COUNT(CASE WHEN  Repeated Call=0 THEN 1 ELSE NULL END )OVER(PARTITION BY Customer_ID 
ORDER BY Call_ID ROWS UNBOUNDED PRECEDING)Order_Gr FROM Table
1
Olga Romantsova 18 Aug. 2020 im 20:02