2016-03-07 14 views
5

Tôi đang gặp sự cố SQL. Tôi đang chạy một kịch bản trên Oracle 11 bằng cách sử dụng Squirrel SQL Client. Một ví dụ đơn giản về vấn đề của tôi. Tôi có các dữ liệu sau:SQL - Nhận giá trị tối đa của trường hiện tại làm trường độc lập trong cùng một tập dữ liệu

ID Date 
1 2016-01-01 
2 2016-01-02 
3 2016-01-03 
4 2016-01-04 
5 2016-01-05 
6 2016-01-06 
7 2016-01-07 
8 2016-01-08 
9 2016-01-09 
10 2016-01-10 

Tôi muốn tạo ra một lĩnh vực mới mà trả về giá trị ngày tối đa như một đứng một mình lĩnh vực:

ID Date  Max_Date 
1 2016-01-01 2016-01-10 
2 2016-01-02 2016-01-10 
3 2016-01-03 2016-01-10 
4 2016-01-04 2016-01-10 
5 2016-01-05 2016-01-10 
6 2016-01-06 2016-01-10 
7 2016-01-07 2016-01-10 
8 2016-01-08 2016-01-10 
9 2016-01-09 2016-01-10 
10 2016-01-10 2016-01-10 

Do sự phức tạp của kịch bản tổng thể của tôi, tôi không thể thực hiện việc này bằng truy vấn phụ. Một giải pháp truy vấn phụ đơn giản có thể trông như thế này.

SELECT a.ID, 
     a.DATE, 
     b.MAX_DATE 
    FROM TABLE1,(SELECT ID, 
         max(DATE) MAX_DATE 
       FROM TABLE1 
       ) b 
WHERE 1=1 

Tuy nhiên giá trị "Bảng 1" của tôi là một tập lệnh rất dài với một số thông số được xác định. Nếu tôi đã sao chép tập lệnh này vào truy vấn phụ ở trên, tôi sẽ cần phải tăng gấp đôi khi xác định tham số của mình tại thời gian chạy.

Vì vậy, tôi tự hỏi, có thể lấy trường hiện có trong bảng và tạo trường bổ sung lặp lại giá trị tối đa của trường hiện tại cho tất cả các hàng không?

Cảm ơn

E

Trả lời

5

Sử dụng một hàm cửa sổ:

SELECT a.ID, 
     a.DATE, 
     max(a.date) over() as max_date 
FROM table1 a 
+0

Perfect, cảm ơn bạn! –

Các vấn đề liên quan