簡體   English   中英

使用分區獲取表中每個項目的最新記錄的 SQL 替代方案

[英]SQL alternative for fetching latest record of each item in a table using partition

我一直在查詢數據庫以使用適用於 MariaDB 10.4* 版的 PARTITION 和 ROW_COUNT() 來共同獲取最新記錄或每個項目,但我想在 MySQL 5.7* 版數據庫上查詢相同的內容,但它在那里不起作用。 我想找出適用於 MySQL 數據庫的替代方案。 請幫幫我。 查詢如下。

SELECT A_id, B_id, Created_at
FROM
(
   SELECT a.id as A_id, b.id as B_id, b.Created_at,
          ROW_NUMBER() OVER (PARTITION BY a.id ORDER BY b.Created_at DESC) AS rn
   FROM beta b 
   JOIN alpha a ON b.a_id = a.id 
) q
WHERE rn = 1

您可以使用連接到子查詢來查找每個id的最新記錄:

SELECT a.id AS A_id, b.id AS B_id, b.Created_at
FROM alpha a
INNER JOIN beta b
    ON a.id = b.a_id
INNER JOIN
(
    SELECT a.id AS max_id, MAX(b.Created_at) AS max_created_at
    FROM alpha a
    INNER JOIN beta b ON a.id = b.a_id
    GROUP BY a.id
) t
    ON t.max_id = a.id AND t.max_created_at = b.Created_at;

這里的想法是,上面別名為t的子查詢的附加連接將只保留記錄,對於每個a.id ,具有來自 B 表的最新Created_at值。 這與您當前使用ROW_NUMBER方法具有相同的效果,而實際上不需要使用分析函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM