เราสามารถใช้ ROW_NUMBER ในการเลือก record แรก (หรือ record ไหนก็ได้) จากการกลุ่มข้อมูล

SQL ด้านล่างนี้เป็นตัวอย่างที่ผมใช้เลือก record แรกจากกลุ่มของข้อมูลนะครับ ใช้บน BigQuery ซึ่งในตัวอย่างนี้ผมอยากจะเลือกเอา order แรกจาก source ที่ผมดึงมา โดยเรียงตาม publish date

SELECT
  *
FROM (
  SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY source ORDER BY publish_date ASC) rn
  FROM
    `main.order`
)
WHERE
  rn = 1;

จะเป็นการ query 2 ชั้นนะครับ ชั้นด้านในเราจะใช้ ROW_NUMBER โดยที่ทำ PARTITION BY source แล้วก็เรียงด้วย publish date เนอะ โดยที่ query นี้เราจะได้ column เพิ่มขึ้นมาชื่อว่า rn ครับ จะมีค่า 1, 2, 3, … ไปเรื่อย ตามแต่ละ source

หลังจากนั้นผมก็แค่ query อีกรอบ เพื่อที่จะดึงเฉพาะ record ที่มีค่า rn = 1 ผมก็จะได้ record แรกแล้วเรียบร้อย :wink: