2 Câu hỏi: Làm cách nào để chỉ chọn hàng SQL có id MAX trong phép nối này?

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi cần lấy bản ghi với id MAX từ bảng đã tham gia này, nhưng tôi chỉ cần hàng trên cùng được nối với truy vấn chính trong truy vấn phụ này. Làm cách nào tôi có thể giới hạn truy vấn con chỉ trả về một hàng? Trước đây, tran_state MAX đã được trả lại không hoạt động chính xác.

LEFT JOIN (
   SELECT
     tran_id
     , MAX(id) AS max_tran_id
     , MAX(DATETIME(created, 'America/New_York')) AS max_tran_created
     , tran_state
   FROM `prod.tran` 
   GROUP BY tran_id
   ) data ON t.id = data.tran_id

Tôi đã cố gắng sửa đổi truy vấn như vậy nhưng tran_state đang trở lại là null.

LEFT JOIN (
    SELECT 
    tran_state, 
    tran_id 
    FROM `prod.tran` WHERE ID IN ( 
    SELECT
    MAX(ID)
    FROM `prod.tran` trans 
    WHERE trans.tran_id = transaction_id)
    ) data ON t.id = data.tran_id
    
- 1
  1. Bạn có thể sử dụng thứ tự theo và giới hạn các hàng được trả về 1.
    2019-05-08 16: 03: 12Z
2 Câu trả lời                              2                         

Hãy thử truy vấn này.

SELECT *
FROM `prod.tran`
WHERE id IN (
    SELECT MAX(id)
    FROM `prod.tran`
    GROUP BY tran_id
) a
    
1
2019-05-08 16: 05: 41Z
  1. Tôi đã thử làm điều này, nhưng nó trả về null cho tran_state vì một số lý do. Tôi đã thêm phiên bản truy vấn con mới vào câu hỏi của mình.
    2019-05-08 17: 51: 53Z
  2. @ J.J. Truy vấn bên trong có trả về cái gì không?
    2019-05-08 18: 14: 15Z

Bạn có thể sử dụng các chức năng của cửa sổ:

LEFT JOIN
(SELECT t.*,
        ROW_NUMBER() OVER (PARTITION BY t.tran_id ORDER BY t.id DESC) as seqnum
 FROM `prod.tran` t
) data
ON t.id = data.tran_id AND t.seqnum = 1
    
1
2019-05-08 18: 31: 17Z
nguồn đặt đây