Nếu bạn đang tìm kiếm để có được những hàng có chứa các giá trị từ MAX(num) GROUP BY id
, điều này có xu hướng trở thành một mô hình phổ biến ...
WITH
sequenced_data
AS
(
SELECT
ROW_NUMBER() OVER (PARTITION BY id ORDER BY num DESC) AS sequence_id,
*
FROM
yourTable
)
SELECT
*
FROM
sequenced_data
WHERE
sequence_id = 1
EDIT
Tôi không biết nếu Teradata sẽ cho phép điều này, nhưng logic dường như có ý nghĩa ...
SELECT
*
FROM
yourTable
WHERE
num = MAX(num) OVER (PARTITION BY id)
Hoặc có thể ...
SELECT
*
FROM
(
SELECT
*,
MAX(num) OVER (PARTITION BY id) AS max_num_by_id
FROM
yourTable
)
AS sub_query
WHERE
num = max_num_by_id
Đây là hơi khác so với câu trả lời trước của tôi; nếu nhiều bản ghi được gắn với cùng một MAX(num)
, điều này sẽ trả về tất cả chúng, câu trả lời khác sẽ chỉ bao giờ trả về một.
EDIT
Trong SQL đề xuất của bạn các lỗi liên quan đến thực tế là mệnh đề OVER()
chứa một lĩnh vực không nằm trong nhóm của bạn. Nó giống như cố gắng để làm điều này ...
SELECT id, num FROM yourTable GROUP BY id
num
là không hợp lệ, vì có thể có nhiều giá trị trong lĩnh vực đó cho mỗi hàng trở (với các hàng trả lại được xác định bởi GROUP BY id
).
Trong cùng một cách, bạn không thể đặt num
bên trong mệnh đề OVER()
.
SELECT
id,
MAX(num), <-- Valid as it is an aggregate
MAX(num) <-- still valid
OVER(PARTITION BY id), <-- Also valid, as id is in the GROUP BY
MAX(num) <-- still valid
OVER(PARTITION BY num) <-- Not valid, as num is not in the GROUP BY
FROM
yourTable
GROUP BY
id
Xem câu hỏi này khi bạn không thể chỉ định một cái gì đó trong mệnh đề OVER()
, và một câu trả lời hiển thị khi (tôi nghĩ) bạn có thể: over-partition-by-question
Chúng tôi không thể nhìn thấy thông báo lỗi của mình từ đây. – RBarryYoung
Bạn có thể hiển thị đầu ra mà bạn mong đợi, mô tả không có ý nghĩa với tôi ... 'Tôi muốn lấy giá trị được liên kết với giá trị tối đa của mỗi số cho mỗi ID'. Tôi cũng không chắc chắn sự khác biệt một ORDER BY sẽ làm cho một hàm MAX() ... – MatBailie
Không phải là một câu trả lời chính xác cho câu hỏi nhưng một giới thiệu tốt về oracle chức năng phân tích có thể được tìm thấy tại [orafaq] (http: // www.orafaq.com/node/55). Bài đăng giúp hiểu các khái niệm với các ví dụ đơn giản. –