2017-03-31 67 views
0

從下表中我試圖找到每個Id1的開始時間和停止時間。 例如,對於Id1 = 103,它開始於2016-11-01 10:50:28 UTC,同一天的車輛停止時間爲2016-11-01 11:23:55 UTC。 類似於id1 = 103,在2016-12-01,開始於2016-12-01 10:51:28 UTC,於2016-12-01 11:28:55結束。分區表並獲取谷歌大查詢中的第一個和最後一個記錄

 Id1 Id2 StartTime     StartDate StopTime    StopDate DateTime 
    1 103 314 2016-11-01 10:50:28 UTC 2016-11-01 2016-11-01 11:22:35 UTC 2016-11-01 2016-11-01 10:50:32 UTC 
    2 103 315 2016-11-01 10:50:28 UTC 2016-11-01 2016-11-01 11:22:48 UTC 2016-11-01 2016-11-01 10:50:49 UTC 
    3 103 316 2016-11-01 10:50:28 UTC 2016-11-01 2016-11-01 11:22:55 UTC 2016-11-01 2016-11-01 10:50:54 UTC 
    4 103 317 2016-11-01 10:50:28 UTC 2016-11-01 2016-11-01 11:23:55 UTC 2016-11-01 2016-11-01 10:51:03 UTC 
    5 103 318 2016-12-01 10:51:28 UTC 2016-12-01 2016-12-01 11:24:15 UTC 2016-12-01 2016-12-01 10:51:19 UTC 
    6 103 319 2016-12-01 10:52:28 UTC 2016-12-01 2016-12-01 11:25:55 UTC 2016-12-01 2016-12-01 10:51:24 UTC 
    7 103 320 2016-12-01 10:53:28 UTC 2016-12-01 2016-12-01 11:26:55 UTC 2016-12-01 2016-12-01 10:51:31 UTC 
    8 103 321 2016-12-01 10:54:28 UTC 2016-12-01 2016-12-01 11:27:55 UTC 2016-12-01 2016-12-01 10:51:40 UTC 
    9 103 322 2016-12-01 10:55:28 UTC 2016-12-01 2016-12-01 11:28:55 UTC 2016-12-01 2016-12-01 10:51:43 UTC 

    Output: 
     Id1 StartTime     StartDate StopTime    StopDate  
    1 103 2016-11-01 10:50:28 UTC 2016-11-01 2016-11-01 11:23:55 UTC 2016-11-01 
    5 103 2016-12-01 10:51:28 UTC 2016-12-01 2016-12-01 11:28:55 UTC 2016-12-01 

我試着用下面的查詢,但不知道爲什麼它不工作:

  SELECT Id1, Date, StartTime, StopTime 
      FROM(
      SELECT 
      Id1, 
      DATE(DateTime) AS Date, 
      FIRST_VALUE(StartTime) OVER (PARTITION BY Id1, DATE(DateTime) ORDER BY DateTime) AS StartTime, 
      LAST_VALUE(StopTime) OVER (PARTITION BY Id1, DATE(DateTime) ORDER BY DateTime ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS StopTime, 
      FROM 
      TestSridevi.ET_Time_Leaving) 
      GROUP BY Id1, Date, StartTime, StopTime 
      ORDER BY Id1 
+1

可能重複的[檢索每個組的第一個和最後一個記錄](http://stackoverflow.com/questions/42765036/retrieving-first-and-last-records-of-each-group) –

回答

1

試試下面

#standardSQL 
WITH yourTable AS (
    SELECT 103 AS Id1, 314 AS Id2, '2016-11-01 10:50:28 UTC' AS StartTime, '2016-11-01' AS StartDate, '2016-11-01 11:22:35 UTC' AS StopTime, '2016-11-01' AS StopDate, '2016-11-01 10:50:32 UTC' AS DateTime UNION ALL 
    SELECT 103, 315, '2016-11-01 10:50:28 UTC', '2016-11-01', '2016-11-01 11:22:48 UTC', '2016-11-01', '2016-11-01 10:50:49 UTC' UNION ALL 
    SELECT 103, 316, '2016-11-01 10:50:28 UTC', '2016-11-01', '2016-11-01 11:22:55 UTC', '2016-11-01', '2016-11-01 10:50:54 UTC' UNION ALL 
    SELECT 103, 317, '2016-11-01 10:50:28 UTC', '2016-11-01', '2016-11-01 11:23:55 UTC', '2016-11-01', '2016-11-01 10:51:03 UTC' UNION ALL 
    SELECT 103, 318, '2016-12-01 10:51:28 UTC', '2016-12-01', '2016-12-01 11:24:15 UTC', '2016-12-01', '2016-12-01 10:51:19 UTC' UNION ALL 
    SELECT 103, 319, '2016-12-01 10:52:28 UTC', '2016-12-01', '2016-12-01 11:25:55 UTC', '2016-12-01', '2016-12-01 10:51:24 UTC' UNION ALL 
    SELECT 103, 320, '2016-12-01 10:53:28 UTC', '2016-12-01', '2016-12-01 11:26:55 UTC', '2016-12-01', '2016-12-01 10:51:31 UTC' UNION ALL 
    SELECT 103, 321, '2016-12-01 10:54:28 UTC', '2016-12-01', '2016-12-01 11:27:55 UTC', '2016-12-01', '2016-12-01 10:51:40 UTC' UNION ALL 
    SELECT 103, 322, '2016-12-01 10:55:28 UTC', '2016-12-01', '2016-12-01 11:28:55 UTC', '2016-12-01', '2016-12-01 10:51:43 UTC' 
) 
SELECT 
    Id1, 
    MIN(StartTime) AS StartTime, 
    StartDate, 
    MAX(StopTime) AS StopTime, 
    StopDate 
FROM yourTable 
GROUP BY Id1, StartDate, StopDate 
ORDER BY Id1, StartDate, StopDate 

結果是

Id1    StartTime StartDate     StopTime stopDate 
103 2016-11-01 10:50:28 UTC 2016-11-01 2016-11-01 11:23:55 UTC 2016-11-01 
103 2016-12-01 10:51:28 UTC 2016-12-01 2016-12-01 11:28:55 UTC 2016-12-01  
相關問題