【发布时间】:2020-11-17 13:51:19
【问题描述】:
我有一张关于网站上用户航班预订模式的数据表。假设以下数据是我拥有的关于我的用户的所有历史数据。
session_date 是用户进入网站并搜索特定路线的日期,而flight_date 是航班的出发日期。我已经通过session_date 订购了这张桌子。结果记录在booked。
+---------+--------------+----------------+--------------+-------------+--------+
| user_id | session_date | departure_code | arrival_code | flight_date | booked |
+---------+--------------+----------------+--------------+-------------+--------+
| user1 | 7 Jan | CA | MY | 8 Mar | 1 |
| user1 | 8 Jan | US | MY | 18 May | 0 |
| user1 | 8 Jan | US | MY | 18 May | 1 |
| user1 | 8 Jan | CA | MY | 19 Mar | 0 |
| user1 | 9 Jan | US | MY | 18 May | 1 |
+---------+--------------+----------------+--------------+-------------+--------+
我想在我的表中输出一个名为previous_flight_date 的新列。新列将在每次搜索时说明先前为该特定路线预订的flight_date。即使用户多次搜索同一条路线但从未预订过,此列中的值也会为空。
+-------+--------------+----------------+--------------+-------------+--------+----------------------+
| _id | session_date | departure_code | arrival_code | flight_date | booked | previous_flight_date |
+-------+--------------+----------------+--------------+-------------+--------+----------------------+
| user1 | 7 Jan | CA | SG | 8 Mar | 1 | null |
| user1 | 8 Jan | US | MY | 18 May | 0 | null |
| user1 | 8 Jan | US | MY | 18 May | 1 | null |
| user1 | 8 Jan | CA | SG | 19 Mar | 0 | 8 Mar |
| user1 | 2 Feb | US | MY | 2 Jul | 1 | 18 May |
+-------+--------------+----------------+--------------+-------------+--------+----------------------+
因此,例如,在反映“3 月 8 日”的第 4 行之前,该列将为空,因为用户已经预订了从 CA-->SG 起飞的当天起飞的航班。
我尝试过使用 LAST_VALUE,但没有成功。当我有多种不同类型的路线时,我也不知道如何使用 LAG(),并且我想在某个条件下查找先前的行。如果提出解决方案会很棒!谢谢。
【问题讨论】:
标签: sql database google-bigquery window-functions gaps-and-islands