Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery 关于daygood点-您是否尝试过调整代码?应该是可行的:哦,我看到了你的另一个问题-可能与此相关-今天晚些时候我会看一看。我注意到一个可能的问题,按照发布在这里的方式执行查询,输出中缺少foo id。我也会检查这一点 +-----+-----+-----_Google Bigquery - Fatal编程技术网

Google bigquery 关于daygood点-您是否尝试过调整代码?应该是可行的:哦,我看到了你的另一个问题-可能与此相关-今天晚些时候我会看一看。我注意到一个可能的问题,按照发布在这里的方式执行查询,输出中缺少foo id。我也会检查这一点 +-----+-----+-----

Google bigquery 关于daygood点-您是否尝试过调整代码?应该是可行的:哦,我看到了你的另一个问题-可能与此相关-今天晚些时候我会看一看。我注意到一个可能的问题,按照发布在这里的方式执行查询,输出中缺少foo id。我也会检查这一点 +-----+-----+-----,google-bigquery,Google Bigquery,关于daygood点-您是否尝试过调整代码?应该是可行的:哦,我看到了你的另一个问题-可能与此相关-今天晚些时候我会看一看。我注意到一个可能的问题,按照发布在这里的方式执行查询,输出中缺少foo id。我也会检查这一点 +-----+-----+------------+----------+---+ | Row | id | start_time | end_time | | +-----+-----+------------+----------+---+ | 1 | foo |


关于daygood点-您是否尝试过调整代码?应该是可行的:哦,我看到了你的另一个问题-可能与此相关-今天晚些时候我会看一看。我注意到一个可能的问题,按照发布在这里的方式执行查询,输出中缺少foo id。我也会检查这一点
+-----+-----+------------+----------+---+
| Row | id  | start_time | end_time |   |
+-----+-----+------------+----------+---+
|   1 | foo | 18:00:00   | 22:00:00 |   |
|   2 | bar | 19:00:00   | 23:00:00 |   |
|   3 | baz | 08:00:00   | 11:00:00 |   |
|   4 | qux | 05:30:00   | 07:30:00 |   |
+-----+-----+------------+----------+---+
WITH TABLE AS (
  SELECT "foo" AS id, TIME(18,0,0) AS start_time, TIME(22,0,0) AS end_time
  UNION ALL
  SELECT "bar", TIME(19,0,0), TIME(23,0,0)
  UNION ALL
  SELECT "baz", TIME(08,0,0), TIME(11,0,0)
  UNION ALL
  SELECT "qux", TIME(05,30,0), TIME(07,30,0)
)

SELECT * FROM TABLE
+-----+-----+------------+----------+---+
| Row | id  | start_time | end_time |   |
+-----+-----+------------+----------+---+
|   1 | foo | 18:00:00   | 22:00:00 |   |
|   2 | bar | 19:00:00   | 22:00:00 |   |
|   3 | bar | 22:00:00   | 23:00:00 |   |
|   4 | baz | 08:00:00   | 11:00:00 |   |
|   5 | qux | 05:30:00   | 06:00:00 |   |
|   6 | qux | 06:00:00   | 07:30:00 |   |
+-----+-----+------------+----------+---+
WITH TABLE AS (
  SELECT "foo" AS id, TIME(18,0,0) AS start_time, TIME(22,0,0) AS end_time
  UNION ALL
  SELECT "bar", TIME(19,0,0), TIME(23,0,0)
  UNION ALL
  SELECT "baz", TIME(08,0,0), TIME(11,0,0)
  UNION ALL
  SELECT "qux", TIME(05,30,0), TIME(07,30,0)
)
SELECT id, intervals.* 
FROM TABLE, 
  UNNEST(IF(
    start_time < TIME '22:00:00' AND end_time > TIME '22:00:00',
    [STRUCT<start_time TIME, end_time TIME>(start_time, TIME '22:00:00'),(TIME '22:00:00',end_time)],
    [STRUCT<start_time TIME, end_time TIME>(start_time, end_time)])) intervals 
#standardSQL
WITH

`project.dataset.table` AS (
  -- across split point
  SELECT "bar" AS id, TIME(18,0,0) AS start_time, TIME(23,0,0) AS end_time UNION ALL
  -- end at split point
  SELECT "foo", TIME(21,45,0), TIME(22,0,0) UNION ALL
  -- start from split point
  SELECT "fuz", TIME(22,0,0), TIME(23,30,0) UNION ALL
  -- across multiple split points
  SELECT "qux", TIME(05,45,0), TIME(23,30,0) UNION ALL
  -- no split point
  SELECT "quz1", TIME(23,30,0), TIME(23,45,0) UNION ALL
  -- no split point
  SELECT "quz2", TIME(02,0,0), TIME(05,59,0)  
),

breaks AS (
  SELECT break FROM UNNEST([TIME(6,0,0), TIME(22,0,0)]) break
),

temp AS (
  SELECT
    id,
    start_time,
    end_time, 
    ARRAY_AGG(break ORDER BY break) AS break
  FROM `project.dataset.table` CROSS JOIN breaks 
  WHERE
    -- [EDIT] >= instead of > to include rows that starts from split point (`fuz`)
    break >= start_time   
    -- [EDIT] <= instead of < to include rows that ends at split  (`foo`)
    AND break <= end_time  
  GROUP BY id, start_time, end_time
)

SELECT
  id,
  point AS start_time,
  IFNULL(next_point, point) AS end_time

FROM (
  SELECT 
    id,
    point, 
    LEAD(point) OVER(PARTITION BY id ORDER BY point) AS next_point
  FROM
    temp,
    UNNEST(ARRAY_CONCAT([start_time], break, [end_time])) aS point
)

WHERE next_point IS NOT NULL

-- [EDIT] Remove data with same value as start_time/end time (generated from rows that starts from split point or ends at split point, foo/fuz)
AND point != next_point


-- [EDIT] temp table does not handle ids that does not cross to any split point, adding them from main table (`quz1` and `quz2`)
UNION ALL SELECT
  id,
  start_time,
  end_time
FROM  `project.dataset.table`
WHERE id NOT IN (SELECT id FROM temp)
+-----+------+------------+----------+---+
| Row |  id  | start_time | end_time |   |
+-----+------+------------+----------+---+
|   1 | bar  | 18:00:00   | 22:00:00 |   |
|   2 | bar  | 22:00:00   | 23:00:00 |   |
|   3 | foo  | 21:45:00   | 22:00:00 |   |
|   4 | fuz  | 22:00:00   | 23:30:00 |   |
|   5 | qux  | 05:45:00   | 06:00:00 |   |
|   6 | qux  | 06:00:00   | 22:00:00 |   |
|   7 | qux  | 22:00:00   | 23:30:00 |   |
|   8 | quz1 | 23:30:00   | 23:45:00 |   |
|   9 | quz2 | 02:00:00   | 05:59:00 |   |
+-----+------+------------+----------+---+
  -- across split point
  SELECT "bar" AS id, TIME(18,0,0) AS start_time, TIME(23,0,0) AS end_time UNION ALL
  -- end at split point
  SELECT "foo", TIME(21,45,0), TIME(22,0,0) UNION ALL
  -- start from split point
  SELECT "fuz", TIME(22,0,0), TIME(23,30,0) UNION ALL
  -- across multiple split points
  SELECT "qux", TIME(05,45,0), TIME(23,30,0) UNION ALL
  -- no split point
  SELECT "quz1", TIME(23,30,0), TIME(23,45,0) UNION ALL
  -- no split point
  SELECT "quz2", TIME(02,0,0), TIME(05,59,0)  
`project.dataset.table` AS (
  SELECT * FROM `myproject.mydataset.test`
),
Error: LEFT OUTER JOIN cannot be used without a condition that is an equality of fields from both sides of the join.