2017-02-17 8 views
0

Google BigQueryでは、イベントの開始時刻を、イベントの種類が開始時刻のイベントの種類と一致しない最大時刻として定義されている終了時刻に関連付けようとしています。2次フィールドに基づいて日付を照合するにはどうすればよいですか?

オリジナルデータセットを:ここで

は私の問題を説明するための例です

Name Event  Event Type Datetime 
**** ****** ********** **************** 
Bob  Tennis Start   2017-02-17 8:00 
Bob  Tennis Playing  2017-02-17 8:10 
Bob  Tennis Playing  2017-02-17 8:20 
Bob  Tennis Playing  2017-02-17 8:30 
Bob  Tennis Playing  2017-02-17 8:50 
Bob  Tennis Start   2017-02-17 10:00 
Bob  Tennis Playing  2017-02-17 10:30 
Bob  Bowling Start   2017-02-18 2:15 
Bob  Bowling Playing  2017-02-18 2:18 

目的のテーブル:

Name Event  Start Datetime  End Datetime 
**** ****** **************** **************** 
Bob  Tennis 2017-02-17 8:00  2017-02-17 8:50 
Bob  Tennis 2017-02-17 10:00 2017-02-17 10:30 
Bob  Bowling 2017-02-18 2:15  2017-02-18 2:18 

私は解決策がpartitionmax機能を伴う必要があります知っているが、私は」イベントタイプが問題の行のものと一致しないmax datetimeを見つける方法がわかりません。

答えて

3

は、あなたのアイデア

#standardSQL 
SELECT Name, Event, MIN(DateTime) AS StartDateTime, MAX(DateTime) AS EndDateTime 
FROM (
    SELECT Name, Event, EventType, DateTime, 
    COUNTIF(EventType = 'Start') OVER(PARTITION BY Name, Event ORDER BY DateTime) AS grp 
    FROM yourTable 
) 
GROUP BY Name, Event, grp 

を与える必要がありますあなたはダミーデータ以下

WITH yourTable AS (
    SELECT 'Bob' AS Name, 'Tennis' AS Event, 'Start' AS EventType, '2017-02-17 08:00' AS DateTime UNION ALL 
    SELECT 'Bob', 'Tennis', 'Playing', '2017-02-17 08:10' UNION ALL 
    SELECT 'Bob', 'Tennis', 'Playing', '2017-02-17 08:20' UNION ALL 
    SELECT 'Bob', 'Tennis', 'Playing', '2017-02-17 08:30' UNION ALL 
    SELECT 'Bob', 'Tennis', 'Playing', '2017-02-17 08:50' UNION ALL 
    SELECT 'Bob', 'Tennis', 'Start', '2017-02-17 10:00' UNION ALL 
    SELECT 'Bob', 'Tennis', 'Playing', '2017-02-17 10:30' UNION ALL 
    SELECT 'Bob', 'Bowling', 'Start', '2017-02-18 02:15' UNION ALL 
    SELECT 'Bob', 'Bowling', 'Playing', '2017-02-18 02:18' 
) 
+0

非常に巧妙なソリューションでそれをテストすることができ、下記お試しください! –

+0

信じられないほど!すべての雹SQLマスターミハイル!本当にありがとう! – dnaeye

関連する問題