2016-08-12 3 views
0

tb2のDateTimeの範囲に基づいてtb1の各IDの緯度と経度を選択しようとしています。Google BigQueryのDateTimeの範囲に基づいたレコードを見つける

tb2では、idごとに4つのDateTimeがあります。私はtb2からDateTimeの範囲を取得する必要があります。例えばのために

、ID = 162のために、TB2はTB2にこのidに

id  DateTime 
162  2016-08-12 00:02:13 UTC 
162  2016-08-12 00:04:55 UTC 
162  2016-08-12 00:24:03 UTC 
162  2016-08-12 00:24:30 UTC 

ようになり、私はc.DateTimeは「の間にあるべきTB1から緯度と経度を取得する必要があります2016-08- 12 00:02:13 UTC 'と' 2016-08-12 00:24:30 UTC '各IDの最初と最後の行を選択し、範囲関数を適用する方法については不明です。どんな助けもありがとう。

SELECT 
* 
FROM (
SELECT 
c.HardwareId AS HardwareId, 
d.DateTime AS DateTime, 
c.Latitude AS Latitude, 
c.Longitude AS Longitude 
FROM (
    SELECT 
    * 
    FROM 
    [db1.tb2]) AS d 
    INNER JOIN (
    SELECT 
    Latitude, 
    Longitude, 
    Id, 
    DateTime 
    FROM TABLE_DATE_RANGE([db1.tb1],TIMESTAMP(CURRENT_TIMESTAMP()),TIMESTAMP(CURRENT_TIMESTAMP())) AS c 
ON 
d.Id = c.Id 
AND c.DateTime = d.DateTime) 
+0

、これを試してみてください必要があるので - これはあなたをピックしたい?なぜtb1にTABLE_DATE_RANGEを適用するのですか? - tb1の1つのテーブルか分割された広告のフォーマットはtb1YYYYMMDDですか?どうか明らかにしてください –

答えて

1

あなただけマックス(日時)とMin(日時)、日付範囲minDateTimeとmaxDateTimeを持つ特定のユーザーがTB1で複数のロング、緯度値を持っている場合

SELECT c.HardwareId AS HardwareId, c.DateTime AS DateTime, 
     c.Latitude AS Latitude, c.Longitude AS Longitude 
FROM 
(
    SELECT id, MAX(DateTime) AS MaxDatetime, MIN(DateTime) as MinDateTime 
    FROM [db1.tb2] 
    GROUP BY id 
) AS d 
JOIN 
[db1.tb1] AS c 
ON c.Id = d.Id 
WHERE c.DateTime >= d.MinDateTime and c.DateTime <= d.MaxDateTime 
関連する問題