Có hai lý do mà row y
không được trả lại là do điều kiện:
-
b.start > a.start
có nghĩa là một hàng sẽ không bao giờ kết hợp với chính nó - GROUP BY sẽ chỉ trả về một bản ghi cho mỗi
APP_nm
giá trị, nhưng tất cả các hàng đều có cùng giá trị.
Tuy nhiên, có những lỗi logic khác trong truy vấn sẽ không xử lý thành công. Ví dụ:làm thế nào nó biết khi nào một phiên "mới" bắt đầu?
Logic bạn tìm kiếm có thể đạt được trong PostgreSQL bình thường với sự trợ giúp của DISTINCT ON
, hiển thị một hàng cho mỗi giá trị đầu vào trong một cột cụ thể. Tuy nhiên, DISTINCT ON
không được Redshift hỗ trợ.
Một số cách giải quyết tiềm năng: DISTINCT BẬT chức năng like cho Redshift
Đầu ra mà bạn tìm kiếm sẽ không đáng kể khi sử dụng một ngôn ngữ lập trình (có thể lặp lại các kết quả và lưu trữ các biến) nhưng lại khó áp dụng cho một truy vấn SQL (được thiết kế để hoạt động trên các hàng kết quả). Tôi khuyên bạn nên trích xuất dữ liệu và chạy nó thông qua một tập lệnh đơn giản (ví dụ:bằng Python), sau đó có thể xuất ra các kết hợp Bắt đầu và Kết thúc mà bạn tìm kiếm.
Đây là một trường hợp sử dụng tuyệt vời cho chức năng Hadoop Streaming , mà tôi đã thực hiện thành công trong quá khứ. Nó sẽ lấy các bản ghi làm đầu vào, sau đó 'ghi nhớ' thời gian bắt đầu và sẽ chỉ xuất bản ghi khi đáp ứng logic cuối mong muốn.