Мне нужно получить группы времени простоя, где speed
равно 0 и есть как минимум две такие последовательные записи, то есть:
+---------------------+---------------------+------+
| min time | max time | idle |
+---------------------+---------------------+------+
| 2017-01-31 23:59:43 | 2017-01-31 23:59:53 | 10 |
| 2017-01-31 23:58:13 | 2017-01-31 23:58:53 | 40 |
| 2017-01-31 23:56:18 | 2017-01-31 23:57:03 | 45 |
+---------------------+---------------------+------+
в идеале с суммарным временем простоя в секундах.
Пример данных:
+-------+-------------------------+
| speed | datetime |
+-------+-------------------------+
| 0 | 2017-01-31 23:59:53 UTC |
| 0 | 2017-01-31 23:59:43 UTC |
| 0.05 | 2017-01-31 23:59:33 UTC |
| 0 | 2017-01-31 23:59:23 UTC |
| 0.02 | 2017-01-31 23:59:13 UTC |
| 0.02 | 2017-01-31 23:59:03 UTC |
| 0 | 2017-01-31 23:58:53 UTC |
| 0 | 2017-01-31 23:58:43 UTC |
| 0 | 2017-01-31 23:58:33 UTC |
| 0 | 2017-01-31 23:58:23 UTC |
| 0 | 2017-01-31 23:58:13 UTC |
| 0.02 | 2017-01-31 23:58:03 UTC |
| 0.02 | 2017-01-31 23:57:53 UTC |
| 0 | 2017-01-31 23:57:43 UTC |
| 0.02 | 2017-01-31 23:57:33 UTC |
| 0 | 2017-01-31 23:57:23 UTC |
| 0.02 | 2017-01-31 23:57:22 UTC |
| 0.02 | 2017-01-31 23:57:13 UTC |
| 0 | 2017-01-31 23:57:09 UTC |
| 0.02 | 2017-01-31 23:57:08 UTC |
| 0 | 2017-01-31 23:57:03 UTC |
| 0 | 2017-01-31 23:56:53 UTC |
| 0 | 2017-01-31 23:56:51 UTC |
| 0 | 2017-01-31 23:56:43 UTC |
| 0 | 2017-01-31 23:56:34 UTC |
| 0 | 2017-01-31 23:56:33 UTC |
| 0 | 2017-01-31 23:56:23 UTC |
| 0 | 2017-01-31 23:56:18 UTC |
+-------+-------------------------+
Запрос:
#standardSQL
SELECT
MIN(datetime), MAX(datetime)
FROM
(SELECT t.*,
(SELECT
COUNT(*)
FROM
`dbtest.log_*` t2
WHERE
t2.datetime <= t.datetime and t2.speed > 0) grp
FROM
`dbtest.log_*` t
WHERE t.speed = 0) x
GROUP BY grp
Результат:
«LEFT OUTER JOIN не может использоваться без условия, которое является равенством полей с обеих сторон соединения».
- Что не так с моим запросом?
- Есть ли лучший способ добиться этого в
bigquery
?