# SQL หาระยะเวลาที่แตกต่างกันระหว่าง 2 records ใน BigQuery

**URL:** https://discuss.dataengineercafe.io/t/sql-2-records-bigquery/104
**Category:** BigQuery
**Tags:** sql, bigquery
**Created:** [January 31, 2022, 4:13am UTC](https://discuss.dataengineercafe.io/t/sql-2-records-bigquery/104 "2022-01-31T04:13:13Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![zkan](https://yyz1.discourse-cdn.com/flex035/user_avatar/discuss.dataengineercafe.io/zkan/32/2_2.png) [@zkan](https://discuss.dataengineercafe.io/u/zkan)
#### Post date: [January 31, 2022, 4:13am UTC](https://discuss.dataengineercafe.io/t/sql-2-records-bigquery/104/1 "2022-01-31T04:13:13Z")

</div>

ใน BigQuery เราสามารถใช้ฟังก์ชั่น `LAG` ได้ เพื่อที่จะดูข้อมูลของ record ก่อนหน้า ซึ่งทำให้เราสามารถคำนวณความแตกต่างระหว่าง record ปัจจุบัน กับ record ก่อนหน้าได้ เช่น ระยะเวลาระหว่าง 2 records เป็นตัว

ตัวอย่าการใช้การก็ถ้าเรามีตาราง Activity Log อยู่ (มี column ชื่อ activity\_id กับ customer\_id) แล้วเราอยากเทียบดูว่าระหว่าง 2 activities ของ customer สักคนหนึ่งเนี่ย มีระยะเวลาห่างกันเป็นกี่วินาที เราจะเขียน SQL ได้ตามนี้

```sql
SELECT
  activity_id,
  customer_id,
  TIMESTAMP_DIFF(
    TIMESTAMP(create_datetime),
    LAG(TIMESTAMP(create_datetime)) OVER (PARTITION BY customer_id ORDER BY create_datetime ASC),
    SECOND
  ) AS time_diff_in_sec
FROM
  `main.activity_log`
ORDER BY
  activity_id

```

ตรงฟังก์ชั่น `LAG` จะต้องมีการทำ `PARTITION BY customer_id` ด้วย เพราะเราต้องการที่จะดู activity เป็นราย customer เนอะ เสร็จแล้วเราก็ต้องใส่ `ORDER BY create_datetime` ด้วย เพราะว่าตอนที่เราใช้ฟังก์ชั่น `TIMESTAMP_DIFF` เราจะได้เอา 2 records มาลบกันได้ถูก 🕶

ถ้าเป็น Database หรือ Data Warehouse อื่นๆ ฟังก์ชั่นคิดว่าน่าจะแตกต่างกันไม่มากไปจากนี้~
