【发布时间】:2016-12-14 02:35:00
【问题描述】:
我有不同 STime 和 ETime 的 Id1 和 Id2。对于每组 Id1 和 Id2,我倾向于获取第一条和最后一条记录(如输出所示)。 我尝试使用 Id1 和 Id2 对表进行分区,并使用以下命令按 asc 和 desc 顺序对其进行排序:
ROW_NUMBER() OVER(PARTITION BY B.HardwareId, A.TripId ORDER BY StartTime) AS first_record,
ROW_NUMBER() OVER(PARTITION BY B.HardwareId, A.TripId ORDER BY StopTime DESC) AS last_record
我没有得到预期的结果。
SELECT
A.Id1 AS Id1,
A.Id2 AS TriId2pId,
STime,
ETime,
Latitude,
Longitude
FROM
Tr.T1 AS A
JOIN
Tp.G2 AS B
ON
A.STime < B.DateTime
AND A.ETime >= B.DateTime
AND A.Id1 = B.Id1
WHERE
(A._PARTITIONTIME BETWEEN TIMESTAMP('2016-11-23')
AND TIMESTAMP('2016-11-23')
AND A.Id1 IN (976))
ORDER BY
B.Id1,
A.Id2,
B.DateTime
Id1 Id2 STime ETime Latitude Longitude
976 715 2016-11-23 13:06:26 2016-11-23 13:23:30 26.2230015 -80.12314
976 715 2016-11-23 13:06:26 2016-11-23 13:23:30 26.2229767 -80.12326
976 715 2016-11-23 13:06:26 2016-11-23 13:23:30 26.2226944 -80.12344
976 800 2016-11-23 13:06:26 2016-11-23 13:24:59 26.2251511 -80.11865
976 800 2016-11-23 13:06:26 2016-11-23 13:24:59 26.2251511 -80.11912
976 800 2016-11-23 13:06:26 2016-11-23 13:24:59 26.2250233 -80.11929
976 800 2016-11-23 13:06:26 2016-11-23 13:24:59 26.2245369 -80.11929
Id1 Id2 STime ETime Latitude Longitude
976 715 2016-11-23 13:06:26 2016-11-23 13:23:30 26.2230015 -80.12314
976 715 2016-11-23 13:06:26 2016-11-23 13:23:30 26.2226944 -80.12344
976 800 2016-11-23 13:06:26 2016-11-23 13:24:59 26.2251511 -80.11865
976 800 2016-11-23 13:06:26 2016-11-23 13:24:59 26.2245369 -80.11929
【问题讨论】:
-
每个 ID 或整个输出的第一个和最后一个?
-
我正在为每个 Id 尝试它
-
什么是
first和last?它是基于哪个字段? -
我正在尝试检索每个 hardwareId 的第一条和最后一条记录。
-
1)。 hardwareId 甚至不在您的输出中-您应该分别更正您的问题; 2) 你对 FIRST 和 LAST 记录的定义是什么?它是基于某个时间场的吗?还是别的什么?
标签: google-bigquery